Browse Source

adding segfault detection as proposed by Lenar Lõhmus [lenar@vision.ee]

--dviner
migration/unlabaled-1.1.2
David Viner 24 years ago
parent
commit
1665272cee
  1. 65
      ext/xslt/sablot.c
  2. 6
      ext/xslt/xslt.dsp

65
ext/xslt/sablot.c

@ -745,13 +745,19 @@ static int scheme_getall(void *user_data, SablotHandle proc, const char *scheme,
xslt_call_function("scheme get all", XSLT_SCHEME(handle).get_all,
3, argv, &retval);
if(!retval) {
/* return failure */
return 1;
}
/* Save the return value in the buffer (copying it) */
*buffer = estrndup(Z_STRVAL_P(retval), Z_STRLEN_P(retval));
*byte_count = Z_STRLEN_P(retval);
/* Free return value */
zval_ptr_dtor(&retval);
/* return success */
return 0;
}
/* }}} */
@ -823,12 +829,22 @@ static int scheme_open(void *user_data, SablotHandle proc, const char *scheme,
xslt_call_function("scheme open", XSLT_SCHEME(handle).open,
3, argv, &retval);
if(!retval) {
/* return failure */
return 1;
}
/* Return value is a resource pointer to an open file */
*fd = Z_LVAL_P(retval);
/* Free it all up */
zval_ptr_dtor(&retval);
if(!*fd) {
/* return failure - unsupported scheme */
return SH_ERR_UNSUPPORTED_SCHEME;
}
/* return success */
return 0;
}
@ -867,6 +883,11 @@ static int scheme_get(void *user_data, SablotHandle proc, int fd, char *buffer,
xslt_call_function("scheme get", XSLT_SCHEME(handle).get,
3, argv, &retval);
if(!retval) {
/* return failure */
return 1;
}
/* Returns the number of bytes read */
*byte_count = Z_LVAL_P(retval);
@ -911,6 +932,11 @@ static int scheme_put(void *user_data, SablotHandle proc, int fd, const char *b
xslt_call_function("scheme put", XSLT_SCHEME(handle).put,
3, argv, &retval);
if(!retval) {
/* return failure */
return 1;
}
/* The return value is the number of bytes written */
*byte_count = Z_LVAL_P(retval);
@ -952,6 +978,11 @@ static int scheme_close(void *user_data, SablotHandle proc, int fd)
xslt_call_function("scheme close", XSLT_SCHEME(handle).close,
2, argv, &retval);
if(!retval) {
/* return failure */
return 1;
}
/* Free everything up */
zval_ptr_dtor(&retval);
@ -986,7 +1017,8 @@ static SAX_RETURN sax_startdoc(void *ctx, SablotHandle processor)
1, argv, &retval);
/* Cleanup */
zval_ptr_dtor(&retval);
if(retval)
zval_ptr_dtor(&retval);
}
/* }}} */
@ -1034,7 +1066,8 @@ static SAX_RETURN sax_startelement(void *ctx, SablotHandle processor,
3, argv, &retval);
/* Cleanup */
zval_ptr_dtor(&retval);
if(retval)
zval_ptr_dtor(&retval);
}
/* }}} */
@ -1068,7 +1101,8 @@ static SAX_RETURN sax_endelement(void *ctx, SablotHandle processor, const char *
2, argv, &retval);
/* Cleanup */
zval_ptr_dtor(&retval);
if(retval)
zval_ptr_dtor(&retval);
}
/* }}} */
@ -1107,7 +1141,8 @@ static SAX_RETURN sax_startnamespace(void *ctx, SablotHandle processor,
3, argv, &retval);
/* Cleanup */
zval_ptr_dtor(&retval);
if(retval)
zval_ptr_dtor(&retval);
}
/* }}} */
@ -1141,7 +1176,8 @@ static SAX_RETURN sax_endnamespace(void *ctx, SablotHandle processor, const char
2, argv, &retval);
/* Cleanup */
zval_ptr_dtor(&retval);
if(retval)
zval_ptr_dtor(&retval);
}
/* }}} */
@ -1175,7 +1211,8 @@ static SAX_RETURN sax_comment(void *ctx, SablotHandle processor, const char *con
2, argv, &retval);
/* Cleanup */
zval_ptr_dtor(&retval);
if(retval)
zval_ptr_dtor(&retval);
}
/* }}} */
@ -1214,7 +1251,8 @@ static SAX_RETURN sax_pi(void *ctx, SablotHandle processor,
3, argv, &retval);
/* Cleanup */
zval_ptr_dtor(&retval);
if(retval)
zval_ptr_dtor(&retval);
}
/* }}} */
@ -1250,7 +1288,8 @@ static SAX_RETURN sax_characters(void *ctx, SablotHandle processor,
2, argv, &retval);
/* Cleanup */
zval_ptr_dtor(&retval);
if(retval)
zval_ptr_dtor(&retval);
}
/* }}} */
@ -1281,7 +1320,8 @@ static SAX_RETURN sax_enddoc(void *ctx, SablotHandle processor)
1, argv, &retval);
/* Cleanup */
zval_ptr_dtor(&retval);
if(retval)
zval_ptr_dtor(&retval);
}
/* }}} */
@ -1499,7 +1539,8 @@ static MH_ERROR error_print(void *user_data, SablotHandle proc, MH_ERROR code, M
4, argv, &retval);
/* Free up */
zval_ptr_dtor(&retval);
if(retval)
zval_ptr_dtor(&retval);
}
else {
char *errmsg = NULL; /* Error message */

6
ext/xslt/xslt.dsp

@ -43,7 +43,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XSLT_EXPORTS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\main" /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\win32" /D "WIN32" /D "COMPILE_DL_XSLT" /D ZTS=1 /D HAVE_XSLT=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "HAVE_SABLOT_BACKEND" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\main" /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\win32" /I "C:\Program Files\Sablot-0.96\include" /D "WIN32" /D "COMPILE_DL_XSLT" /D ZTS=1 /D HAVE_XSLT=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "HAVE_SABLOT_BACKEND" /YX /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x407 /d "NDEBUG"
@ -53,7 +53,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
# ADD LINK32 kernel32.lib php4ts.lib sablot.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_xslt.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
# ADD LINK32 kernel32.lib php4ts.lib sablot.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_xslt.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"C:\Program Files\Sablot-0.96\lib"
!ELSEIF "$(CFG)" == "xslt - Win32 Debug_TS"
@ -68,7 +68,7 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_TS"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XSLT_EXPORTS" /YX /FD /GZ /c
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XSLT_EXPORTS" /YX /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_XSLT=1 /D COMPILE_DL_XSLT=1 /D "HAVE_SABLOT_BACKEND" /YX /FD /GZ /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32

Loading…
Cancel
Save