问题列表 - 第42706页

C标准库中的哪些功能通常会鼓励不良做法?

这是受到这个问题以及对一个特定答案的评论的启发,我strncpy在C 中学到了这不是一个非常安全的字符串处理函数,它会填充零,直到它到达n,我不知道的东西.

具体来说,引用R ..

strncpy不会为null终止,并且会对目标缓冲区的其余部分进行空填充,这是一个巨大的浪费时间.您可以通过添加自己的空填充来解决前者,但不能添加后者.它从未打算用作"安全字符串处理"功能,但是用于处理Unix目录表和数据库文件中的固定大小字段.snprintf(dest,n,"%s",src)是标准C中唯一正确的"安全strcpy",但它可能会慢很多.顺便说一下,截断本身可能是一个主要的错误,并且在某些情况下可能会导致权限提升或DoS,因此抛出"安全"字符串函数会在问题中截断其输出并不是使其"安全"或"安全".相反,您应该确保目标缓冲区的大小合适,并且只需使用strcpy(或者更好的是,如果您已经知道源字符串长度,则使用memcpy).

来自Jonathan Leffler

请注意,strncat()在其接口中比strncpy()更令人困惑 - 这个长度参数到底又是什么?根据你提供的strncpy()等,它不是你所期望的 - 所以它甚至比strncpy()更容易出错.为了复制字符串,我越来越认为有一个强烈的论据,你只需要memmove(),因为你总是提前知道所有的大小,并确保提前有足够的空间.使用memmove()优先于strcpy(),strcat(),strncpy(),strncat(),memcpy()中的任何一个.

所以,我在C标准库上显然有些生疏.因此,我想提出一个问题:

哪些C标准库函数使用不当/可能导致/导致安全问题/代码缺陷/效率低下?

为了客观性,我有一些答案的标准:

  • 如果可以,请引用相关功能背后的设计原因,即其预期目的.
  • 请突出显示当前代码的误用情况.
  • 请说明滥用可能导致问题的原因.我知道这应该是显而易见的,但它会阻止软答案.

请避免:

  • 关于函数命名约定的争论(除非这明显引起混淆).
  • "我更喜欢x而不是y" - 偏好是可以的,我们都拥有它们,但我对实际出乎意料的副作用以及如何防范它们感兴趣.

由于这可能被认为是主观的,并且没有明确的答案,我正在为社区维基立刻做好准备.

我也按照C99工作.

c security c99 standard-library

54
推荐指数
6
解决办法
6947
查看次数

单击NSTokenField中的令牌

当您单击NSTokenField中的令牌时是否可以获取事件?

cocoa nstokenfield

7
推荐指数
1
解决办法
975
查看次数

我该如何重构这段代码?

我有.net 3.5,我想制作一个通用的方法.我该如何重构这段代码?

            case (int)Enums.SandwichesHoagies.Cheeses:
                if (this.Cheeses.Where(x => x.Id == product.ProductId).SingleOrDefault() == null)
                {
                    var newCheese = new Cheese
                    {
                        Id = product.ProductId,
                        Name = product.Name,
                        PriceValue = product.Price.HasValue ? (double)product.Price.Value : 0.00
                    };

                    this.Cheeses.Add(newCheese);
                }
                else
                {
                    foreach (var cheese in this.Cheeses.Where(cheese => cheese.Id == product.ProductId))
                    {
                        this.Cheeses.Remove(cheese);
                        break;
                    }
                }

                foreach (var cheese in Cheeses) cheese.Type = string.Empty;

                if (this.Cheeses.Count > 0) Cheeses.First().Type = "Cheeses:";

                break;

            case (int)Enums.SandwichesHoagies.Meats:
                if (this.Meats.Where(x => x.Id == product.ProductId).SingleOrDefault() == null)
                {
                    var newMeat …
Run Code Online (Sandbox Code Playgroud)

c# linq asp.net generics refactoring

2
推荐指数
1
解决办法
237
查看次数

使用ASCII和base 128混淆字符串

假设一个字符串是一个数字系统,其中每个东西,它可以是char,DEL或任何ASCII的东西,根据这个ASCII 具有相应的数字.如何在Python中将属性的任意字符串转换为数字?

一个例子

#car = 35*128**3+99*128**2+97*128**1+114*128**0=75034866
Run Code Online (Sandbox Code Playgroud)

python obfuscation encoding ascii

2
推荐指数
1
解决办法
3350
查看次数

在NumPy数组中查找等于零的元素索引

NumPy具有有效的函数/方法nonzero()来识别ndarray对象中非零元素的索引.什么是最有效的方式来获得该元素的索引具有零值?

python numpy

124
推荐指数
6
解决办法
20万
查看次数

动态模型验证

我想为我的一个模型创建一些验证,其中包含位置信息(街道,地点,邮政编码等).我希望能够根据选择的国家/地区更改验证规则.

例如,postal_code的验证规则对于美国和加拿大将是不同的.此外,一些国家没有邮政编码,因此不需要验证规则.

我将如何实现这样的事情?

ruby validation ruby-on-rails ruby-on-rails-3

2
推荐指数
1
解决办法
1875
查看次数

Smarty权限问题

Smarty抱怨权限.我为我正在研究的项目编写了一个小的mvc框架,我需要能够在每个控制器中呈现模板.我继续按照Smarty安装说明进行操作,并在我的"前端控制器"或将请求路由到应用程序其余部分的页面中设置所有配置选项.testinstall函数说一切都是犹太洁食,但当我尝试在控制器中渲染模板时,我最终得到了这个.

警告:mkdir():第28行/var/www/HRTRL/includes/CallLog/lib/Smarty/libs/sysplugins/smarty_internal_write_file.php中的权限被拒绝警告:重命名(/ tmp/wrt6piczo,./ templates_c/73b1662b4c376f493278f9873564df03430a0b43.file .poopy.tpl.php):第48行/var/www/HRTRL/includes/CallLog/lib/Smarty/libs/sysplugins/smarty_internal_write_file.php中没有这样的文件或目录警告:chmod():没有这样的文件或目录在/var/www/HRTRL/includes/CallLog/lib/Smarty/libs/sysplugins/smarty_internal_write_file.php第50行警告:include(./ templates_c/73b1662b4c376f493278f9873564df03430a0b43.file.poopy.tpl.php):无法打开流:第423行/var/www/HRTRL/includes/CallLog/lib/Smarty/libs/sysplugins/smarty_internal_template.php中没有此类文件或目录警告:include():打开'./templates_c/73b1662b4c376f493278f9873564df03430a0b43.file.poopy失败.在/ var/www/HRTRL/includes/CallLog/lib/Smarty/libs/sysp中包含tpl.php'(include_path ='.:/ usr/share/php:/ usr/share/pear')第423行的lugins/smarty_internal_template.php

我已经独立测试了我的框架的其余部分,一切似乎都有效.我的"前端控制器"将请求正确地路由到正确的控制器,我似乎能够正常渲染常规HTML.

另外,为了测试,我已经将所有Smarty库文件夹以及其他所需目录chmod到777.我仍然收到相同的权限错误.

编辑

这些是我用于所有必需的智能文件夹的设置.

$smarty->setTemplateDir('lib/smarty/templates');
$smarty->setCompileDir('lib/smarty/templates_c');
$smarty->setCacheDir('lib/smarty/cache');
$smarty->setConfigDir('lib/smarty/configs');
Run Code Online (Sandbox Code Playgroud)

php templates smarty

7
推荐指数
2
解决办法
2万
查看次数

malloc和HeapAlloc之间是否存在根本区别(除了可移植性)?

我有代码,由于各种原因,我正在尝试从C运行时移植到使用Windows Heap API的代码.我遇到了一个问题:如果我重定向malloc/ calloc/ realloc/ free调用HeapAlloc/ HeapReAlloc/ HeapFree(使用GetProcessHeap的手柄),内存似乎是正确分配(无不良指针返回,没有抛出异常),但我的图书馆porting因某种原因说"未能分配内存".

我已尝试使用Microsoft CRT(使用下面的Heap API)和另一个公司的运行时库(使用下面的Global Memory API); 两者的malloc适用于库,但由于某些原因,直接使用Heap API不起作用.

我已经检查过分配不是太大(> = 0x7FFF8字节),而它们不是.

我能想到的唯一问题是内存对齐; 那是这样吗?或者除此之外,Heap API和我不知道的CRT内存API有根本区别吗?

如果是这样,它是什么?如果没有,那么为什么静态 Microsoft CRT(包含在Visual Studio中)在调用之前malloc/ calloc之前需要一些额外的步骤HeapAlloc?我怀疑存在差异,但我想不出它可能是什么.

谢谢!

heap malloc winapi msvcrt heapalloc

7
推荐指数
1
解决办法
2728
查看次数

Rails - CSV导出:提示文件下载

我想让我的用户能够将表导出为CSV.

所以在我的控制器中,我已添加到文件的顶部:

  respond_to :html, :js, :csv
Run Code Online (Sandbox Code Playgroud)

如果请求的格式是csv,我也设置标题:

if params[:format] == 'csv'
  generate_csv_headers("negotiations-#{Time.now.strftime("%Y%m%d")}") 
end
Run Code Online (Sandbox Code Playgroud)

generate_csv_headers(在application_controller中)的代码是:

  def generate_csv_headers(filename)
    headers.merge!({
      'Cache-Control'             => 'must-revalidate, post-check=0, pre-check=0',
      'Content-Type'              => 'text/csv',
      'Content-Disposition'       => "attachment; filename=\"#{filename}\"",
      'Content-Transfer-Encoding' => 'binary'
    })
  end
Run Code Online (Sandbox Code Playgroud)

我还创建了一个名为index.csv.erb生成我的文件的视图:

<%- headers = ["Id", "Name"] -%>
<%= CSV.generate_line headers %>
<%- @negotiations.each do |n| -%>
<%- row = [ n.id,
            n.name ] -%>
<%=   CSV.generate_line row %>
<%- end -%>
Run Code Online (Sandbox Code Playgroud)

我没有任何错误,但它只是显示CSV文件的内容,而我希望浏览器提示下载文件.

我已经阅读了很多,但找不到任何有用的东西.你有好主意吗?

谢谢,p.

csv ruby-on-rails

14
推荐指数
1
解决办法
1万
查看次数

PHP:如何获得一周的日子?

我想在某个日期以DATE值存储我的数据库中的项目.我不知道如何从本周获得当前的周一,周二等.这是我当前的数据库设置.

menuentry
 id int(10) PK
 menu_item_id int(10) FK
 day_of_week date
 message varchar(255)
Run Code Online (Sandbox Code Playgroud)

所以我有一个类设置,包含所有信息然后我会做这样的事情......

foreach ( $menuEntryArray as $item )
{
   if ( $item->getDate() == [DONT KNOW WHAT TO PUT HERE] )
   {
      // code to display menu_item information
   }
} 
Run Code Online (Sandbox Code Playgroud)

所以我只是不确定该怎么把"[不知道该怎么放在这里]"进行比较,看看是否为本周的周一或周二指定了日期等.上面的foreach运行一周中的每一天 - 所以它看起来像这样......

Monday
Item 1
Item 2
Item 3

Tuesday
Item 1

Wednesday
Item 1
Item 2

...
Run Code Online (Sandbox Code Playgroud)

谢谢!

php mysql date

0
推荐指数
1
解决办法
1235
查看次数