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

运行个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

华为联合西北工业大学开设鸿蒙生态菁英班50人左右,锁定终端软件领域IT之家7月5日消息西北工业大学官方近期宣布,为深入推进校企联合培养,激发同学们在终端软件领域的技术热忱,华为联合西北工业大学开设鸿蒙生态菁英班,旨在培养具有终端专业知识,热爱终端EpicCEO并不是因为索尼要投资才称赞PS5,真没收钱IT之家7月11日消息在索尼PS5发布后,Epic从CEO到公司高管不乏对PS5大加赞赏,甚至在公开采访时称其为系统设计的大师杰作。但戏剧性的是,本周二,索尼收购了Epic工作室价不买免费送!育碧将向7月13观看庆典活动的用户赠送看门狗2感谢IT之家网友罗灬小炎的线索投递!IT之家7月7日消息育碧的首个在线直播形式的庆典活动UbisoftForward将于7月12日(北京时间7月13日130分预演开始)正式开启。届腾讯市值突破6000亿美元超阿里巴巴,马云身家反超黄峥6月22日消息,时隔两年腾讯股价再创新高,目前涨幅扩大至3,报价488。8港元大关,创历史新高。最新市值46717亿港元,折合6027亿美元。目前阿里巴巴市值4。63万亿港元。值得支付宝发放千亿免息生活费,免息期内免费使用7月2日下午消息,支付宝宣布将通过借呗向全国范围内符合条件的用户提供金额1000元10000元免息期1周至2个月不等的免息生活费,并针对湖北地区用户翻倍免息期。对于疫情过后急需周转支付宝发声希望天下无假章IT之家7月1日消息今日下午,贵阳警方通报称,3人伪造老干妈公章和腾讯签订合同,已刑拘。初步查明,系犯罪嫌疑人曹某(男,36岁)刘某利(女,40岁)郑某君(女,37岁)伪造老干妈公12306官方小程序上线支付宝,还将升级推出候补票功能IT之家7月1日消息12306官方支付宝小程序已正式上线。这是12306继官网及App外的首个站外官方服务渠道。在最新版支付宝首页顶栏的出行页面即可买火车票或退改签,或上支付宝搜1小程序创业者一年前拒绝200万融资,如今却被迫卖公司去年和大概10家投资机构有联系,行情也还好,所以100200万没拿。今年,要有100万就不错了。正在找融资的李宇感到有些后悔。在过去的一年,他做的一款报名小程序实现了50的用户增长7月1日起,全国发放100亿元消费券支付宝整点开抢IT之家6月30日消息明天(7月1日)起,规模100亿的全国版消费券正式开始发放。每天早上8点12点,用户上支付宝搜717就可以领取,每次可一键领取3张,分别为102305,601彭博胡晓明加速支付宝变革,欲从腾讯虎口夺食据外媒报道,亿万富翁马云的新掌门人正在加速支付宝的变革,要将其演变成为一个包括从贷款,到旅游再到外卖配送的网上商城,以此从腾讯手中夺回用户。蚂蚁集团胡晓明正在积极地向肯德基和万豪国微信官方所谓7月1日微信不支持个人转账存在严重误读IT之家6月30日消息今年5月份,微信支付面对商户合作伙伴发布分账能力调整通知。通知称微信支付将于7月1日起不再支持通过微信号添加个人为分账接收方,仅保留通过openid的方式添加
近7成大学生曾遭遇骗子,支付宝拆解8种常见校园诈骗大学生其实是易受骗人群,你知道吗?今天支付宝联合中青报发布报告称近7成大学生曾遭遇骗子,4成校园诈骗发生在入学季前后一个月内。今年,支付宝联合复旦上交浙大等近百所高校,在10万新生小米英国市场受专利海盗骚扰IT之家2月24日消息今日,小米将在巴塞罗那召开小米9全球发布会,IT之家参加MWC的同事,也会参加小米全球发布会,并现场发回现场报道。此前,雷军在小米9国内发布会结束之后,接受采路透社英国不赞成全面禁止华为网络设备北京时间2月19日消息,据路透社报道,知情人士透露,尽管美国指控中国公司华为的产品存在网络安全风险,但是英国安全官员并不支持在该国的电信网络中全面禁止华为。目前,由于美国呼吁其盟国淘宝2018年度数据周三最忍不住买买买IT之家1月22日消息淘宝网今天发布的2018年度数据报告,报告显示平均每个月有超过6亿名用户活跃在淘宝上,其中女性用户每天打开10次,男性用户打开7次。报告显示,国人逛淘宝的高峰告别裸奔,上海颁发首批个人网店营业执照IT之家1月20日消息据新华社报道,日前,上海市监管部门开始发放首批个人网店营业执照,这就意味着电子商务法实施后,个人网店将正式告别无证时代。据了解,该网店经营者开店已经两年,全新淘宝发布2018年度宝贝发际线男孩背后,年轻人开始关注日渐稀少的发量IT之家12月28日消息日前,淘宝公布了2018年淘宝年度宝贝,随着众多热点事件的集中爆发,各种各样的周边商品销售也迎来了不小的销售增长。根据淘宝的统计,00后发际线男孩小吴因为一2019年,天猫新文创将推更多博物馆IP新品IT之家1月18日消息天猫宣布,将在2019年推出天猫新文创计划,助力文创行业的商业化以及触达更多的消费者。天猫还会和各大博物馆一起打造智慧博物馆,让消费者在实体展区体验到VRAR四川木里森林火灾确认为雷击导致,着火点为一棵80年树龄的云南松IT之家4月5日消息3月30日,四川木里森林发生火灾,火灾导致31人遇难,今天,经过四川森林公安部门侦查后确认,木里森林大火的起火点和雷击树木均已找到,确认为雷击火,着火点是一棵云为了省钱,美航空企业决定从巴西发射火箭3月20日消息,美国与巴西签署了一份协议,允许美国火箭企业在巴西境内发射火箭,这很可能让一处被停用了数年的基地重新投入使用。巴西的大西洋沿岸附近有一处名为阿尔坎塔拉的火箭发射基地,马云发表署名文章不争首富争首负IT之家9月26日消息今天上午,马云在中央网信办主管媒体网络传播杂志发表署名文章,谈企业责任。马云提到,掌握核心技术是一家好的互联网企业当仁不让的责任。并称,不争首富争首负。马云表LV母公司拟以145亿美元现金收购蒂芙尼据知情人士透露,路易威登(LouisVuitton)母公司路威酩轩集团(LVMH)拟以145亿美元现金收购美国珠宝商蒂芙尼(TiffanyampCo。),这将是该集团收购规模最大的