范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

运行个HelloWorld也能出Bug?PythonJavaC等16种语言中枪,最严重可导致文件丢失

  一句最简单的 Hello World,居然也会出 Bug?
  倒不是这句代码还能写错,而是运行时找到了许多操作系统对异常处理的漏洞。
  在向 /dev/full  输出结果,也就是设备空间不足、任何写入都应失败的情况下,C 语言依然返回了 0,成功退出:$gcchello.c-ohello $./hello>/dev/full $echo$? 0
  Bug 的最初发现者表示:这可不是一个小错误,本质上是"打印到标准输出"的任务。
  发生了错误但不抛出异常 ,意味着即使出现数据丢失,进程依然会继续运行。
  于是他一不做二不休,又测试了 C++、Python、Java 等热门语言,发了篇博客,很快就在论坛盖起了高楼,讨论度直接爆了:
  而评论区网友一通 Debug,综合整理下来,踩中这一 Bug 的语言,竟足足有 16 种 之多!
  Hello World 的 DeBug 过程
  最初的发现者是一名名叫 sunfishcode 的技术博主,他在博客里展示了 C 和 Python 两种语言的详细的 deBug 过程。
  主要使用的是 Linux 系统下的一个经典的设备文件,/dev/ full。
  /dev/ full 总是在写入时返回设备无剩余空间(错误码为 ENOSPC),常常用于测试程序能否正确处理 I / O 错误。
  如果程序正常,那么就会返回错误报告:$echo"HelloWorld!">/dev/full bash:echo:writeerror:Nospaceleftondevice $echo$? 1
  而正如我们开头所示的代码,在用 C 语言进行输出时,hello 程序却报告成功,返回了 0。
  用 strace 命令跟踪这一进程产生的系统调用可以发现,程序确实出现了故障:$strace-etrace=write./hello>/dev/full write(1,"HelloWorld!\n",13)=-1ENOSPC(Nospaceleftondevice) +++exitedwith0+++
  而以"错误不该被悄悄传递"为口号的 Python 也着了道。
  程序向 stderr 打印了一条消息,丢失了信息,但最后也返回了 0:$python2hello.py>/dev/full closefailedinfileobjectdestructor: sys.excepthookismissing lostsys.stderr $echo$? 0
  这个 Bug 严重吗?现实世界任何一个程序都不会拿 Hello World 当作关键性安全问题,但"打印到标准输出"却是现实中确实会有的程序任务。
  而这也正是 Hello World 这个最简单的程序的本质。
  博主 sunfishcode 这样说:标准输出可能意味着一个具体文件,那么如果这个文件刚好耗尽了空间,程序又因为 Bug 没有检测到这一错误呢?
  父进程不会知道子进程失败了,只会继续运行。但期望生成的输出实际上已经丢失了数据。
  当然,博主在最后也给出了没有踩雷的语言列表:
  网友热议:这到底算不算 Bug?
  目前,博主已经针对这一 Bug 给出了一些解决方案,比如在 C 语言环境中可以采用这样的方法:#include<stdio.h> #include<stdlib.h>  intmain(void){ printf("Hello,World!\n");  if(fflush(stdout)!=0||ferror(stdout)!=0){ returnEXIT_FAILURE; }  returnEXIT_SUCCESS; }
  而评论区也贡献了 Java 环境中的解决方案,即添加一个方法来获得底层的、未包装的 OutputStream:System.out.println("HelloWorld!"); if(System.out.checkError())thrownewIOException();
  下方还有人补充到,Java 已经引入的 RuntimeIOException 就可以用于 I / O 异常出现意外的情况:
  因此我们可以引入一个新的类,比如 ErrorCheckingPrintStream,并将"ErrorCheckingPrintStream withErrorChecks ()"方法添加到 PrintStream 中。
  而除此之外,评论区热议的一个话题就是:
  这位博主所公布的问题到底算不算是一个 Bug?
  反对者直言作者是在标题党,还以为是发现了什么 C 语言标准库里的 Bug,但实际上只是处理所有可能的系统调用的失败情况:
  Hello World 只是简单地将 API 调用到文本界面,对一个简单的接口进行调用,我在那里没有发现过任何 Bug。
  有赞同的评论在下方做了进一步的补充,他认为 C 语言的编写方式里本来就写明:程序不关心任何形式的错误条件。
  包括 printf 的返回值被忽略、输出不被刷新、刷新的返回不被检查、不关心 errno 值等等。
  所以,用户本就不应该期望给定的系统调用返回额外的 errno 值,而是应该用特殊方法处理特殊情况。
  甚至有人表示:程序的失败不是由程序控制结构定义,而是由需求定义,Hello World 程序的需求难道包括主机系统的所有错误边界吗?
  也有人更赞同作者,认为 Hello World 不只是接口调用,实际是在要求操作系统在某处写入数据,而这正是简单的程序与现实世界相关联的地方:
  这是一个严重的问题,而似乎在大多数时候,这种看似简单的功能中存在的大量复杂性都被忽略了。
  还有另辟蹊径,从教育的角度来看的评论:
  毕竟 C 语言时很多程序员的入门语言,hello.c 又是其中的第一个程序,要让初学者更好地理解控制结构,块,返回值,缓冲流的,printf 格式化语言等概念,所以还是把它当成一个 Bug 吧。
  那么你又怎么看?
  参考链接:
  [1]https://blog.sunfishcode.online/Bugs-in-hello-world/
  [2]https://news.ycombinator.com/item?id=30611367
  [3]https://github.com/sunfishcode/hello-world-vs-io-errors

DigiTimes三星将Note20系列的出货预期放低IT之家7月10日消息据媒体DigiTimes昨日报道,供应链指出三星GalaxyNote205G系列出货较预期大幅减少,甚至部分零部件7月已要求暂停供货。DigiTimes六月调三星MicroLED电视生产计划将推迟IT之家7月10日消息消息韩国媒体TheElec本月8日报道称,据知情人士透露,三星电子推迟了原定于上半年开始生产的MicroLED电视生产计划,但三星发言人称仍将在下半年推出其M福布斯2020年韩国富豪榜三星李健熙173亿美元居首IT之家7月9日消息福布斯今日在微信平台发布2020年韩国富豪榜。50位韩国顶级富豪的财富总额为1108亿美元,与去年的1100亿美元几乎没有变化。上榜门槛从一年前的8。55亿美元联想官方公布已投资23家芯片公司寒武纪比亚迪半导体IT之家7月7日消息前段时间,联想集团战略入股比亚迪半导体的新闻引发业内关注。比亚迪半导体是比亚迪旗下的全资子公司,也是目前国内最大的车规级IGBT厂商。官方介绍,联想已经投资了多全球最大100TBSSD公布价格约28。07万元IT之家7月8日消息早在2018年,全闪存存储厂商NimbusData宣布推出ExaDriveDC100系列固态硬盘,其最高100TB的容量打破了当时这一产品的纪录,而且至今没有被Q2季度SSD硬盘价格暴跌30,下半年价格或更低IT之家7月7日消息据中国闪存市场数据,SATASSD120GB价格从12。5美元下调至12美元240GB价格维持在21美元下调至20。5美元480GB价格从39。5美元下调至39曝苹果iPhone12Pro全面转向OLED屏幕,日本JDI股价大跌IT之家7月8日消息日本显示器(JDI)公司股价周三早盘大跌6,因此前日经新闻媒体报道称,苹果今年即将推出的5GiPhone12将全部采用OLED屏幕。IT之家获悉,日本显示器是苹戴尔考虑剥离云软件公司VMware500亿美元股份,或收购剩余股份6月24日消息,据国外媒体报道,戴尔正在考虑剥离持有的云软件公司VMware的股份,收购剩余股份进而完全控制这一公司也是选项之一。VMware创立于1998年,是一家企业软件公司,冠捷发布U28P2U显示器28英寸4K10。7亿色IT之家6月29日消息冠捷近日在官网上架了一款全新的显示器U28P2UBS,面向高端设计用户。该显示器屏幕选用了少见的28英寸IPS面板。AOCU28P2U采用了灰黑配色,三边窄边微博4K视频功能正式全面开放!IT之家7月5日消息微博官方宣布,微博4K视频功能全面开放。IT之家了解到,微博在2018年就已经部分支持4K视频上传,现在微博正式面向创作者和观看用户开放4K视频功能。微博4K视每日电讯英首相约翰逊宣布将逐步停止在英国5G网络中使用华为技术IT之家7月5日消息据路透社援引每日电讯消息报道,英国首相鲍里斯约翰逊(BorisJohnson)预计最快将于今年开始从英国的5G网络建设中逐步淘汰华为技术。IT之家了解到,目前英
哈啰顺风车正式在全国300余座城市上线IT之家2月22日消息哈啰出行官方宣布哈啰顺风车在全国300余座城市上线,今天起,在哈啰出行App或哈啰出行支付宝小程序上,就可以使用顺风车服务。此前,哈啰顺风车在杭州等22城上线可开锁多家共享单车,哈啰诉全能车App不正当竞争IT之家1月26日消息据中国经营报报道,2016年底一款名为全能车的App现身,据产品介绍,用户不需要下载多款共享单车App,在全能车缴纳一份押金就可以使用任意品牌共享单车。据悉,腾讯推出民汉翻译微信小程序支持维藏语与简体中文互翻IT之家4月30日消息今天,腾讯官方宣布推出一款腾讯民汉翻译的微信小程序,目的是为了便于民族交流。。(你好,欢迎来到新疆)在新疆很多地方,语言的障碍成为交流的难题。目前它支持维语藏腾讯推网易相册搬家工具转移至QQ空间IT之家4月28日消息此前网易相册公告称,2019年3月6日起,网易相册网站将会停止新用户注册VIP充值服务,并且关闭网站部分功能2019年5月8日,网易相册将会全面停止运营,关闭中国中车厦门地铁进入永磁时代,首列永磁牵引列车上线服役IT之家8月7日消息从中国中车获悉,近日,在厦门地铁2号线东孚车辆段,司机对列车进行了上线运营前最后的整备检查,在确认信号灯道岔正确后,列车驶出车辆段,标志着厦门地铁2号线首列永磁我国人脸识别市场规模将破百亿,律师称盗取人脸信息或触犯刑法IT之家8月19日消息本周三,央视新闻报道称,人脸识别的应用在我国各行业增长较快。受到疫情的原因,人脸识别这种非接触的技术为包括火车站小区办公楼等场景提供了较大帮助。报道称,数据显图森未来与采埃孚将合作研发量产化无人驾驶卡车系统3月27日早间消息,图森未来宣布与汽车供应商采埃孚(ZF)将于2020年4月开展合作,进一步推动无人驾驶卡车的技术研发和商业化落地,涵盖全球最大的市场,包括中国北美和欧洲。图森未来原Momenta研发总监任少卿入职,蔚来自动驾驶研发重心转回国内8月14日上午消息,有媒体报道驻守蔚来北美的自动驾驶副总裁JamieCarlson已经在6月离职,原Momenta研发总监任少卿入职蔚来,担任助理副总裁,向蔚来CEO李斌直接汇报。蔚来汽车回应换电权益退坡终身免费换电没有改变8月12日下午消息,针对网上出现的8月中下旬终身免费换电权益将有重大退坡一事,蔚来汽车对新浪科技表示,目前终身免费换电政策没有取消,新买车的用户依然可以享受免费换电服务。2019年好看视频整顿针对不完整内容视频,违规将进行降权等处罚IT之家11月4日消息据站长之家报道,今天,好看视频创作者中心发布公告称,将对站内不完整内容进行整顿,对于创作者发布的不完整内容,将根据严重程度对内容进行拒审降权等处罚。如果创作者囧妈网络免费首播,豆瓣评分6。5IT之家1月25日消息大年初一零点起,徐峥导演兼主演的囧系列片之囧妈如期在网上免费首播,囧妈豆瓣评分已正式出炉,截止至发稿时是6。5分。其中,有40左右的用户给出3星评价,12左右