这两天仔细看了wenv源码,发现一些问题并修改了,大部分是按个人需求改的,比如命令、变量名长度的严格识别。但有一个地方可能是BUG,在replace_str里面,有个防止缓冲区越界的条件 while (*in && po - out < MAX_ENV_LEN),后面那个条件永远为真的,我觉得应该反过来 out-po。这个BUG比较隐蔽,一般人碰不到,只有变量值比较长,接近最大值,且替换后超过最大值才会越界,但不一定会有明显的症状,要看越界后被覆盖的是什么内容。
/* The flags for the builtins. */
#define BUILTIN_CMDLINE 0x1 /* Run in the command-line. */
#define BUILTIN_MENU 0x2 /* Run in the menu. */
#define BUILTIN_TITLE 0x4 /* Only for the command title. */
#define BUILTIN_SCRIPT 0x8 /* Run in the script. */
通过flags可以限制程序执行,比如不允许在菜单中运行则
if (flags & BUILTIN_MENU) return 0;