开源改变世界!!

一些潜在的 NPE 错误 #1304

推推 grbl 2年前 (2023-01-28) 232次浏览
打开
七月陈728 开启了这期 2019 年 11 月 12 日 · 8条评论
打开

一些潜在的 NPE 错误#1304

七月陈728 开启了这期 2019 年 11 月 12 日 · 8条评论

注释

一些潜在的 NPE 错误 #1304

大家好,

我们的工具发现了几个潜在的 NPE 错误

第一个在runSimulation中。

变量parserThread初始化为 null 并将由parserThread = new Thread(simOutputBuffer);. 但是,如果赋值之前的三个指令引发 IOException,则程序将跳过赋值并执行 if (parserThread.isAlive())
由于变量parserThread仍然为 null,因此程序将引发 NullPointerException。

第二个是由return nullin 方法center()引起的。

例如,
getLinesFromParser中,如果ps.center()返回null并在center.x中使用,则为 NPE 错误

如果lastSegment.center()返回 null 并在GcodePreprocessorUtils.generatePointsAlongArcBDringGcodePreprocessorUtils.getAngle处使用并最终在end.y – start.y 处取消引用;

第三个是由return nullin 方法getControllerFor()引起的。

例如,一个调用链是this.controller = FirmwareUtils.getControllerFor(firmware);applySettingsToController(settings, this.controller);并且 controller.getCommandCreator()...

谢谢。

一些潜在的 NPE 错误 #1304
合作者

很好,谢谢。

有没有办法在 master 分支上运行该工具?1.0.9 版本很旧,您引用的一些代码已被删除。

一些潜在的 NPE 错误 #1304

很好,谢谢。

有没有办法在 master 分支上运行该工具?1.0.9 版本很旧,您引用的一些代码已被删除。

当然,这是 master 分支上的结果。

第295行和第306行、第100行和第101行的空检查不一致(region在方法中使用initialize)。

在 method updateGLColorArray中,空关系也不一致。在第387lineColorData 行只有一个空值检查在第381、390、393行使用了该变量。

关于可能返回null的方法,
getStateFromStatusString460处返回null ,然后在341处使用340行的返回值,最后在473行解引用null值

此外,可以在第289addLinearPointSegment行返回空值,在279处调用该方法,并且可以在280处使用空值。

lookupCode可以在第224行返回 null ,然后在637调用该方法并且可以在638使用 null 。

extractMotion可以在第629646行返回 null ,然后可以在第81行调用该方法,并且可以在第82行使用 null 值。

fromString可能在第92行返回 null ,然后在第115行调用它,并在第116行使用它的返回值。

getSettingsTextField可能会在387处返回 null 。调用该方法并在第423行使用其返回值。

lookup可能在50时返回 null 。第9095行调用该方法并使用其返回值。

一个有趣的方法是第74 SendStatusPanel()行的方法,它在第78行调用并将变量设置为 null 。请注意,该变量在类中经常使用。尽管似乎从未被调用过,但保留此构造函数可能不是一个好主意。 this(null); backend backend SendStatusPanel()

谢谢。

一些潜在的 NPE 错误 #1304
合作者

太好了,我的周末得救了!😁
非常感谢!

一些潜在的 NPE 错误 #1304

我们还发现了一种潜在的 ArrayIndexOutOfBounds 错误。

变量查找由 更新lookups.put(record.get(0), list.toArray(new String[0]));。但是,其中的内容list来自CSVRecord 未进行文件完整性检查的文件。如果有人使用只有两列的 csv 文件,那么第 142、130 或 148 行的数组访问导致ArrayIndexOutOfBounds异常

谢谢。

一些潜在的 NPE 错误 #1304

嗨,我们刚才已经报告了这些错误,请您看一下并确认它们是否是真正的错误。我们一直在进行一项实验来测量静态检查器的准确性。如果您能提供一些反馈,我们将不胜感激!

一些潜在的 NPE 错误 #1304
合作者

我还没来得及细看。其中一些是非常明显的风险,可能应该抛出异常或返回可选值而不是 null。这个周末我可能会有时间。

一些潜在的 NPE 错误 #1304

谢谢。

一些潜在的 NPE 错误 #1304
合作者
布雷勒 评论了 2020 年 1 月 8 日  

很抱歉花了这么长时间才回复你们!我一直在查看代码并验证了您指出的大部分地方的问题。

你在用什么工具?


第295行和第306行的空检查不一致

  • 空检查不一致,但应该永远不会成为问题,因为列表总是在默认构造函数中创建。然而,我们确实允许分配一个空列表,该列表可能应该被断言并抛出非法参数异常。

第100行和第101行的空检查不一致(region在方法中使用initialize)。

  • 是的,这个不好。=)

在 method updateGLColorArray中,空关系也不一致。在第387lineColorData 行只有一个空值检查在第381、390、393行使用了该变量。

  • 我很难理解其中的所有代码。我们可能应该进一步研究这个

getStateFromStatusString在460处返回 null ,然后在341行使用第340行的返回值,最后,可以在第473行取消引用 null 值

  • 这应该以不同的方式处理,即使我认为它不太可能发生。这里的解决方案是返回一个“未知”状态字符串而不是空值。

addLinearPointSegment可以在第289行返回空值,在279处调用该方法,并且可以在280处使用空值。

  • 这很可能会导致 NPE:s 并且应该被修复!

lookupCode可以在第224行返回 null ,然后在637调用该方法并且可以在638使用 null 。

  • 是的,这可能不应该返回 null。看起来使用此方法的代码不会将任何不需要的代码传递给它。但是为了降低在新代码中引入错误的风险,它可能应该以不同的方式处理这个问题。

extractMotion可以在第629646行返回 null ,然后可以在第81行调用该方法,并且可以在第82行使用 null 值。

  • 是的,这似乎是一种风险。

fromString可能在第92行返回 null ,然后在第115行调用它,并在第116行使用它的返回值。

  • 这种情况不太可能发生,但当然应该解决。

getSettingsTextField可能会在387处返回 null 。调用该方法并在第423行使用其返回值。

  • 当我们添加额外的轴时,这很可能会导致问题。谢谢!

lookup可能在50时返回 null 。第9095行调用该方法并使用其返回值。

  • 这看起来风险很低,很可能永远不会发生,但当然应该解决。

一个有趣的方法是第74 SendStatusPanel()行的方法,它在第78行调用并将变量设置为 null 。请注意,该变量在类中经常使用。尽管似乎从未被调用过,但保留此构造函数可能不是一个好主意。 this(null); backend backend SendStatusPanel()

  • 是的,那不应该工作… =)
一些潜在的 NPE 错误 #1304 布雷勒 补充说 漏洞 标签 2020 年 1 月 8 日

免费注册 在 GitHub 上加入此对话。已有帐户? 登录评论
标签
项目

还没有

发展

没有分支机构或拉取请求

3人参加
一些潜在的 NPE 错误 #1304一些潜在的 NPE 错误 #1304一些潜在的 NPE 错误 #1304

喜欢 (0)