зеркало из https://github.com/mozilla/pjs.git
Bug 399642 - "Make parsing stricter" [p=longsonr@gmail.com (Robert Longson) r=tor sr+a1.9=roc]
This commit is contained in:
Родитель
32d272346f
Коммит
28ba72a1f1
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче