Project

General

Profile

Bug #1399

Updated by Dmitry M. over 8 years ago

------ 
 test program: 

 ~~~ c 
 ------ 
 #include <errno.h> 
 #include <time.h> 
 #include <stdio.h> 

 static const char NULL_PTR_VALUE[] = "<NULL>"; 

 int main(int argc, char* argv[]) 
 { 
     time_t when; 
     struct tm *local; 

     when = time(NULL); 
     local = gmtime(&when); 
     if (local == NULL) 
     { 
         printf("gmtime() failed, errno=%d\n", errno); 
         return 1; 
     } 

     const char* tm_zone = local->tm_zone; 
     if (tm_zone == NULL) 
        tm_zone = NULL_PTR_VALUE; 

     printf("date: %d.%d.%d, time: %d:%d:%d, zone: %s\n", 
         local->tm_year + 1900, local->tm_mon + 1, local->tm_mday, 
         local->tm_hour, local->tm_min, local->tm_sec, 
         tm_zone); 

     return 0; 
 } 
 ~~~ 

 ------ 
 output: 

 ~~~ 
 ------ 
 [build 824] 
 shell@remix_x86_64:/data/local/tmp $ ./test_gmtime_old 
 date: 2016.5.21, time: 16:9:36, zone: GMT 

 [build 853] 
 shell@remix_x86_64:/data/local/tmp $ ./test_gmtime 
 date: 2016.5.21, time: 16:9:55, zone: <NULL> 

 ------ 
 ~~~ 

 impact - we have crash in python interpreter: 

 ~~~ 
 ------ 
 shell@remix_x86_64:/data/local/tmp $ ./bin/python 
 Python 3.5.1 (default, May 21 2016, 15:14:20)  
 [GCC 5.3 20151204] on linux 
 Type "help", "copyright", "credits" or "license" for more information. 
 >>> import time 
 >>> time.gmtime() 
 Segmentation fault 

 Program received signal SIGSEGV, Segmentation fault. 
 strlen (str=str@entry=0x0) 
     at /home/cislave/workspace/ndk-build-all/HOST/linux/LABEL/ndk-build/platform/ndk/sources/crystax/gen/freebsd/lib/libc/string/mangled-strlen.c:100 
 100 	 in /home/cislave/workspace/ndk-build-all/HOST/linux/LABEL/ndk-build/platform/ndk/sources/crystax/gen/freebsd/lib/libc/string/mangled-strlen.c 
 (gdb) bt 
 #0    strlen (str=str@entry=0x0) 
     at /home/cislave/workspace/ndk-build-all/HOST/linux/LABEL/ndk-build/platform/ndk/sources/crystax/gen/freebsd/lib/libc/string/mangled-strlen.c:100 
 #1    0x00005555556adbe2 in PyUnicode_DecodeLocale (str=0x0, errors=0x555555a3423d "surrogateescape") 
     at /home/vet/me/android/0/externals/python35/Objects/unicodeobject.c:3573 
 #2    0x0000555555797e3b in tmtotuple (p=p@entry=0x7fffffffe230) at /home/vet/me/android/0/externals/python35/Modules/timemodule.c:296 
 #3    0x0000555555798d25 in time_gmtime (self=<optimized out>, args=<optimized out>) at /home/vet/me/android/0/externals/python35/Modules/timemodule.c:351 
 #4    0x0000555555666a09 in PyCFunction_Call (func=func@entry=0x7ffff7d18828, args=args@entry=0x7ffff7df4048, kwds=kwds@entry=0x0) 
     at /home/vet/me/android/0/externals/python35/Objects/methodobject.c:109 
 #5    0x00005555556d9e08 in call_function (oparg=<optimized out>, pp_stack=0x7fffffffe3b0) at /home/vet/me/android/0/externals/python35/Python/ceval.c:4655 
 #6    PyEval_EvalFrameEx (f=f@entry=0x7ffff7df3868, throwflag=throwflag@entry=0) at /home/vet/me/android/0/externals/python35/Python/ceval.c:3185 
 #7    0x00005555556dbd19 in _PyEval_EvalCodeWithName (_co=_co@entry=0x7ffff7d4d420, globals=globals@entry=0x7ffff7d9f5c8,  
     locals=locals@entry=0x7ffff7d9f5c8, args=args@entry=0x0, argcount=argcount@entry=0, kws=kws@entry=0x0, kwcount=kwcount@entry=0, defs=defs@entry=0x0,  
     defcount=defcount@entry=0, kwdefs=kwdefs@entry=0x0, closure=closure@entry=0x0, name=name@entry=0x0, qualname=qualname@entry=0x0) 
     at /home/vet/me/android/0/externals/python35/Python/ceval.c:3966 
 #8    0x00005555556dbe19 in PyEval_EvalCodeEx (_co=_co@entry=0x7ffff7d4d420, globals=globals@entry=0x7ffff7d9f5c8, locals=locals@entry=0x7ffff7d9f5c8,  
     args=args@entry=0x0, argcount=argcount@entry=0, kws=kws@entry=0x0, kwcount=kwcount@entry=0, defs=defs@entry=0x0, defcount=defcount@entry=0,  
     kwdefs=kwdefs@entry=0x0, closure=closure@entry=0x0) at /home/vet/me/android/0/externals/python35/Python/ceval.c:3987 
 #9    0x00005555556dbe5c in PyEval_EvalCode (co=co@entry=0x7ffff7d4d420, globals=globals@entry=0x7ffff7d9f5c8, locals=locals@entry=0x7ffff7d9f5c8) 
     at /home/vet/me/android/0/externals/python35/Python/ceval.c:777 
 #10 0x00005555556140a5 in run_mod (mod=mod@entry=0x7ffff6d870e0, filename=filename@entry=0x7ffff7d4c928, globals=0x7ffff7d9f5c8, locals=0x7ffff7d9f5c8,  
     flags=flags@entry=0x7fffffffe6d0, arena=arena@entry=0x7ffff6c17160) at /home/vet/me/android/0/externals/python35/Python/pythonrun.c:970 
 #11 0x0000555555615fe7 in PyRun_InteractiveOneObject (fp=fp@entry=0x555556361980 <__sF>, filename=filename@entry=0x7ffff7d4c928,  
     flags=flags@entry=0x7fffffffe6d0) at /home/vet/me/android/0/externals/python35/Python/pythonrun.c:233 
 #12 0x00005555556162ce in PyRun_InteractiveLoopFlags (fp=fp@entry=0x555556361980 <__sF>, filename_str=filename_str@entry=0x555555a3426f "<stdin>",  
     flags=flags@entry=0x7fffffffe6d0) at /home/vet/me/android/0/externals/python35/Python/pythonrun.c:112 
 #13 0x00005555556169ff in PyRun_AnyFileExFlags (fp=fp@entry=0x555556361980 <__sF>, filename=0x555555a3426f "<stdin>", closeit=0,  
     flags=flags@entry=0x7fffffffe6d0) at /home/vet/me/android/0/externals/python35/Python/pythonrun.c:74 
 #14 0x00005555556c0eaa in run_file (p_cf=0x7fffffffe6d0, filename=0x0, fp=0x555556361980 <__sF>) 
     at /home/vet/me/android/0/externals/python35/Modules/main.c:318 
 #15 Py_Main (argc=<optimized out>, argv=<optimized out>) at /home/vet/me/android/0/externals/python35/Modules/main.c:768 
 #16 0x00005555555fea3f in main (argc=1, argv=<optimized out>) at jni/interpreter.c:55 
 ~~~

Back