2013-08-23 1 views
0

Я пишу код для чтения и открытия конфигурации 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 '` 

Любой помощь для решения этой проблемы приветствуется

ответ

1

Я считаю, что config_filename может быть NULL здесь, особенно с учетом этого сообщения:

I/O warning : failed to load external entity "NULL" 

Если это не так, нам, вероятно, понадобится больше контекста.