Я пишу код для чтения и открытия конфигурации myapp из xml-файла. код попытка разобрать файл для ключевых элементов и создать их, если они не существуют:авария с SIGSEGV в __GI ___ strdup()
static xmlDocPtr configsave_open(const char *config_filename)
{
xmlDocPtr doc;
xmlNodePtr top;
int create_file = 0;
doc = xmlParseFile(config_filename);
......................................
xmlKeepBlanksDefault(0);
if(create_file) {
char *temp = strdup(config_filename); /* <-- crashed with SIGSEGV in __GI___strdup() */
if(! temp) {
fprintf(stderr, "strdup failed for config_filename %s\n", config_filename);
xmlFreeDoc(doc);
return 0;
}
mkdir_and_force_owner(dirname(temp), getuid(), getgid());
free(temp);
}
......................................
return doc;
}
Я пишу TestCase:
#!/bin/bash
# seed id: 16154
DIR="$(cd "$(dirname "$0")" && pwd)"
GDB=
if [ "$1" = "-g" ]
then
GDB="gdb --args"
fi
env -i \
MALLOC_CHECK_=0 \
$GDB \
/usr/bin/myapp \
"`cat $DIR/argv_1.symb`" \
"`cat $DIR/argv_2.symb`" \
\
< "$DIR/file___dev__stdin.symb"
exit_code=$?
exit $exit_code
где argv_2.symb файл containe:
'`
и file__ dev _stdin.symb содержит:
AAAAAAAAAAAAAAAAAAAAAAAA
выхода
аварии:
I/O warning : failed to load external entity "NULL"
./exploit.sh: line 19: 7175 Segmentation fault
(core dumped)
env -i MALLOC_CHECK_=0 $GDB /usr/bin/myapp "`cat $DIR/argv_1.symb`" "`cat $DIR/argv_2.symb`" < "$DIR/file___dev__stdin.symb"
основного сбой при попытке запустить MyApp с CONFIGFILE аргументов:
/usr/bin/myapp --configfile '`
Любой помощь для решения этой проблемы приветствуется