mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-14 05:45:37 +00:00
Bug 123584 JavaScript engine should use malloc/realloc/free consistently
Replace JS_DELETE with free/JS_smprintf_free r=rogerl
This commit is contained in:
parent
786239d041
commit
33607fc717
@ -396,7 +396,7 @@ static int cvt_s(SprintfState *ss, const char *s, int width, int prec,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** BiuldArgArray stands for Numbered Argument list Sprintf
|
** BuildArgArray stands for Numbered Argument list Sprintf
|
||||||
** for example,
|
** for example,
|
||||||
** fmp = "%4$i, %2$d, %3s, %1d";
|
** fmp = "%4$i, %2$d, %3s, %1d";
|
||||||
** the number must start from 1, and no gap among them
|
** the number must start from 1, and no gap among them
|
||||||
@ -405,9 +405,9 @@ static int cvt_s(SprintfState *ss, const char *s, int width, int prec,
|
|||||||
static struct NumArgState* BuildArgArray( const char *fmt, va_list ap, int* rv, struct NumArgState* nasArray )
|
static struct NumArgState* BuildArgArray( const char *fmt, va_list ap, int* rv, struct NumArgState* nasArray )
|
||||||
{
|
{
|
||||||
int number = 0, cn = 0, i;
|
int number = 0, cn = 0, i;
|
||||||
const char* p;
|
const char *p;
|
||||||
char c;
|
char c;
|
||||||
struct NumArgState* nas;
|
struct NumArgState *nas;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -478,7 +478,7 @@ static struct NumArgState* BuildArgArray( const char *fmt, va_list ap, int* rv,
|
|||||||
if( c == '%' ) continue;
|
if( c == '%' ) continue;
|
||||||
|
|
||||||
cn = 0;
|
cn = 0;
|
||||||
while( c && c != '$' ){ /* should imporve error check later */
|
while( c && c != '$' ){ /* should improve error check later */
|
||||||
cn = cn*10 + c - '0';
|
cn = cn*10 + c - '0';
|
||||||
c = *p++;
|
c = *p++;
|
||||||
}
|
}
|
||||||
@ -606,7 +606,7 @@ static struct NumArgState* BuildArgArray( const char *fmt, va_list ap, int* rv,
|
|||||||
|
|
||||||
if( *rv < 0 ){
|
if( *rv < 0 ){
|
||||||
if( nas != nasArray )
|
if( nas != nasArray )
|
||||||
JS_DELETE( nas );
|
free( nas );
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -641,7 +641,7 @@ static struct NumArgState* BuildArgArray( const char *fmt, va_list ap, int* rv,
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
if( nas != nasArray )
|
if( nas != nasArray )
|
||||||
JS_DELETE( nas );
|
free( nas );
|
||||||
*rv = -1;
|
*rv = -1;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -674,10 +674,10 @@ static int dosprintf(SprintfState *ss, const char *fmt, va_list ap)
|
|||||||
static char *HEX = "0123456789ABCDEF";
|
static char *HEX = "0123456789ABCDEF";
|
||||||
char *hexp;
|
char *hexp;
|
||||||
int rv, i;
|
int rv, i;
|
||||||
struct NumArgState* nas = NULL;
|
struct NumArgState *nas = NULL;
|
||||||
struct NumArgState nasArray[ NAS_DEFAULT_NUM ];
|
struct NumArgState nasArray[ NAS_DEFAULT_NUM ];
|
||||||
char pattern[20];
|
char pattern[20];
|
||||||
const char* dolPt = NULL; /* in "%4$.2f", dolPt will poiont to . */
|
const char *dolPt = NULL; /* in "%4$.2f", dolPt will poiont to . */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -727,7 +727,7 @@ static int dosprintf(SprintfState *ss, const char *fmt, va_list ap)
|
|||||||
|
|
||||||
if( nas[i-1].type == TYPE_UNKNOWN ){
|
if( nas[i-1].type == TYPE_UNKNOWN ){
|
||||||
if( nas && ( nas != nasArray ) )
|
if( nas && ( nas != nasArray ) )
|
||||||
JS_DELETE( nas );
|
free( nas );
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -987,7 +987,7 @@ static int dosprintf(SprintfState *ss, const char *fmt, va_list ap)
|
|||||||
rv = (*ss->stuff)(ss, "\0", 1);
|
rv = (*ss->stuff)(ss, "\0", 1);
|
||||||
|
|
||||||
if( nas && ( nas != nasArray ) ){
|
if( nas && ( nas != nasArray ) ){
|
||||||
JS_DELETE( nas );
|
free( nas );
|
||||||
}
|
}
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
@ -1089,7 +1089,7 @@ JS_PUBLIC_API(char *) JS_smprintf(const char *fmt, ...)
|
|||||||
*/
|
*/
|
||||||
JS_PUBLIC_API(void) JS_smprintf_free(char *mem)
|
JS_PUBLIC_API(void) JS_smprintf_free(char *mem)
|
||||||
{
|
{
|
||||||
JS_DELETE(mem);
|
free(mem);
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_PUBLIC_API(char *) JS_vsmprintf(const char *fmt, va_list ap)
|
JS_PUBLIC_API(char *) JS_vsmprintf(const char *fmt, va_list ap)
|
||||||
@ -1104,7 +1104,7 @@ JS_PUBLIC_API(char *) JS_vsmprintf(const char *fmt, va_list ap)
|
|||||||
rv = dosprintf(&ss, fmt, ap);
|
rv = dosprintf(&ss, fmt, ap);
|
||||||
if (rv < 0) {
|
if (rv < 0) {
|
||||||
if (ss.base) {
|
if (ss.base) {
|
||||||
JS_DELETE(ss.base);
|
free(ss.base);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1203,7 +1203,7 @@ JS_PUBLIC_API(char *) JS_vsprintf_append(char *last, const char *fmt, va_list ap
|
|||||||
rv = dosprintf(&ss, fmt, ap);
|
rv = dosprintf(&ss, fmt, ap);
|
||||||
if (rv < 0) {
|
if (rv < 0) {
|
||||||
if (ss.base) {
|
if (ss.base) {
|
||||||
JS_DELETE(ss.base);
|
free(ss.base);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
108
js/src/jsutil.c
108
js/src/jsutil.c
@ -1,4 +1,4 @@
|
|||||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||||
*
|
*
|
||||||
* ***** BEGIN LICENSE BLOCK *****
|
* ***** BEGIN LICENSE BLOCK *****
|
||||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
@ -52,9 +52,9 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef XP_MAC
|
#ifdef XP_MAC
|
||||||
# include <Types.h>
|
# include <Types.h>
|
||||||
# include <stdarg.h>
|
# include <stdarg.h>
|
||||||
# include "jsprf.h"
|
# include "jsprf.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef XP_MAC
|
#ifdef XP_MAC
|
||||||
@ -65,76 +65,76 @@
|
|||||||
* If the C String pointer is NULL, the pascal string's length is
|
* If the C String pointer is NULL, the pascal string's length is
|
||||||
* set to zero.
|
* set to zero.
|
||||||
*/
|
*/
|
||||||
static void PStrFromCStr(const char* src, Str255 dst)
|
static void PStrFromCStr(const char *src, Str255 dst)
|
||||||
{
|
{
|
||||||
short length = 0;
|
short length = 0;
|
||||||
|
|
||||||
/* handle case of overlapping strings */
|
/* handle case of overlapping strings */
|
||||||
if ( (void*)src == (void*)dst )
|
if ( (void*)src == (void*)dst )
|
||||||
{
|
{
|
||||||
unsigned char* curdst = &dst[1];
|
unsigned char *curdst = &dst[1];
|
||||||
unsigned char thisChar;
|
unsigned char thisChar;
|
||||||
|
|
||||||
thisChar = *(const unsigned char*)src++;
|
thisChar = *(const unsigned char*)src++;
|
||||||
while ( thisChar != '\0' )
|
while ( thisChar != '\0' )
|
||||||
{
|
{
|
||||||
unsigned char nextChar;
|
unsigned char nextChar;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Use nextChar so we don't overwrite what we
|
* Use nextChar so we don't overwrite what we
|
||||||
* are about to read
|
* are about to read
|
||||||
*/
|
*/
|
||||||
nextChar = *(const unsigned char*)src++;
|
nextChar = *(const unsigned char*)src++;
|
||||||
*curdst++ = thisChar;
|
*curdst++ = thisChar;
|
||||||
thisChar = nextChar;
|
thisChar = nextChar;
|
||||||
|
|
||||||
if ( ++length >= 255 )
|
if ( ++length >= 255 )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( src != NULL )
|
else if ( src != NULL )
|
||||||
{
|
{
|
||||||
unsigned char* curdst = &dst[1];
|
unsigned char *curdst = &dst[1];
|
||||||
/* count down so test it loop is faster */
|
/* count down so test it loop is faster */
|
||||||
short overflow = 255;
|
short overflow = 255;
|
||||||
register char temp;
|
register char temp;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Can't do the K&R C thing of while (*s++ = *t++)
|
* Can't do the K&R C thing of while (*s++ = *t++)
|
||||||
* because it will copy trailing zero which might
|
* because it will copy trailing zero which might
|
||||||
* overrun pascal buffer. Instead we use a temp variable.
|
* overrun pascal buffer. Instead we use a temp variable.
|
||||||
*/
|
*/
|
||||||
while ( (temp = *src++) != 0 )
|
while ( (temp = *src++) != 0 )
|
||||||
{
|
{
|
||||||
*(char*)curdst++ = temp;
|
*(char*)curdst++ = temp;
|
||||||
|
|
||||||
if ( --overflow <= 0 )
|
if ( --overflow <= 0 )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
length = 255 - overflow;
|
length = 255 - overflow;
|
||||||
}
|
}
|
||||||
dst[0] = length;
|
dst[0] = length;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void jsdebugstr(const char *debuggerMsg)
|
static void jsdebugstr(const char *debuggerMsg)
|
||||||
{
|
{
|
||||||
Str255 pStr;
|
Str255 pStr;
|
||||||
|
|
||||||
PStrFromCStr(debuggerMsg, pStr);
|
PStrFromCStr(debuggerMsg, pStr);
|
||||||
DebugStr(pStr);
|
DebugStr(pStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dprintf(const char *format, ...)
|
static void dprintf(const char *format, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
char *buffer;
|
char *buffer;
|
||||||
|
|
||||||
va_start(ap, format);
|
va_start(ap, format);
|
||||||
buffer = (char *)JS_vsmprintf(format, ap);
|
buffer = (char *)JS_vsmprintf(format, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
jsdebugstr(buffer);
|
jsdebugstr(buffer);
|
||||||
JS_DELETE(buffer);
|
JS_smprintf_free(buffer);
|
||||||
}
|
}
|
||||||
#endif /* XP_MAC */
|
#endif /* XP_MAC */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user