Bug 399642 - "Make parsing stricter" [p=longsonr@gmail.com (Robert Longson) r=tor sr+a1.9=roc]

This commit is contained in:
reed@reedloden.com 2007-10-19 01:54:21 -07:00
Родитель 32d272346f
Коммит 28ba72a1f1
4 изменённых файлов: 46 добавлений и 46 удалений

Просмотреть файл

@ -184,28 +184,22 @@ GetValueFromString(const nsAString &aValueAsString,
float *aValue, float *aValue,
PRUint16 *aUnitType) PRUint16 *aUnitType)
{ {
char *str = ToNewCString(aValueAsString); NS_ConvertUTF16toUTF8 value(aValueAsString);
if (!str) const char *str = value.get();
return NS_ERROR_OUT_OF_MEMORY;
nsresult rv = NS_ERROR_FAILURE; if (NS_IsAsciiWhitespace(*str))
return NS_ERROR_FAILURE;
if (*str) { char *rest;
char *rest; *aValue = float(PR_strtod(str, &rest));
*aValue = static_cast<float>(PR_strtod(str, &rest)); if (rest != str) {
if (rest != str) { *aUnitType = GetUnitTypeForString(rest);
*aUnitType = GetUnitTypeForString(nsCRT::strtok(rest, if (IsValidUnitType(*aUnitType)) {
"\x20\x9\xD\xA", return NS_OK;
&rest));
if (IsValidUnitType(*aUnitType)) {
rv = NS_OK;
}
} }
} }
nsMemory::Free(str); return NS_ERROR_FAILURE;
return rv;
} }
float float

Просмотреть файл

@ -52,12 +52,18 @@ nsSVGInteger::SetBaseValueString(const nsAString &aValueAsString,
nsSVGElement *aSVGElement, nsSVGElement *aSVGElement,
PRBool aDoSetAttr) PRBool aDoSetAttr)
{ {
nsAutoString s; NS_ConvertUTF16toUTF8 value(aValueAsString);
s.Assign(aValueAsString); const char *str = value.get();
PRInt32 err;
PRInt32 val = s.ToInteger(&err); if (NS_IsAsciiWhitespace(*str))
nsresult rv = static_cast<nsresult>(err); return NS_ERROR_FAILURE;
NS_ENSURE_SUCCESS(rv, rv);
char *rest;
PRInt32 val = strtol(str, &rest, 10);
if (rest == str || *rest != '\0') {
return NS_ERROR_FAILURE;
}
mBaseVal = mAnimVal = val; mBaseVal = mAnimVal = val;
return NS_OK; return NS_OK;
} }

Просмотреть файл

@ -145,28 +145,22 @@ GetValueFromString(const nsAString &aValueAsString,
float *aValue, float *aValue,
PRUint16 *aUnitType) PRUint16 *aUnitType)
{ {
char *str = ToNewCString(aValueAsString); NS_ConvertUTF16toUTF8 value(aValueAsString);
if (!str) const char *str = value.get();
return NS_ERROR_OUT_OF_MEMORY;
nsresult rv = NS_ERROR_FAILURE; if (NS_IsAsciiWhitespace(*str))
return NS_ERROR_FAILURE;
if (*str) { char *rest;
char *rest; *aValue = float(PR_strtod(str, &rest));
*aValue = static_cast<float>(PR_strtod(str, &rest)); if (rest != str) {
if (rest != str) { *aUnitType = GetUnitTypeForString(rest);
*aUnitType = GetUnitTypeForString(nsCRT::strtok(rest, if (IsValidUnitType(*aUnitType)) {
"\x20\x9\xD\xA", return NS_OK;
&rest));
if (IsValidUnitType(*aUnitType)) {
rv = NS_OK;
}
} }
} }
nsMemory::Free(str); return NS_ERROR_FAILURE;
return rv;
} }
float float

Просмотреть файл

@ -54,12 +54,18 @@ nsSVGNumber2::SetBaseValueString(const nsAString &aValueAsString,
nsSVGElement *aSVGElement, nsSVGElement *aSVGElement,
PRBool aDoSetAttr) PRBool aDoSetAttr)
{ {
nsAutoString s; NS_ConvertUTF16toUTF8 value(aValueAsString);
s.Assign(aValueAsString); const char *str = value.get();
PRInt32 err;
float val = s.ToFloat(&err); if (NS_IsAsciiWhitespace(*str))
nsresult rv = static_cast<nsresult>(err); return NS_ERROR_FAILURE;
NS_ENSURE_SUCCESS(rv, rv);
char *rest;
float val = float(PR_strtod(str, &rest));
if (rest == str || *rest != '\0') {
return NS_ERROR_FAILURE;
}
mBaseVal = mAnimVal = val; mBaseVal = mAnimVal = val;
return NS_OK; return NS_OK;
} }