nsresult SVGNumberList::SetValueFromString(const nsAString& aValue) { SVGNumberList temp; nsCharSeparatedTokenizerTemplate<IsSVGWhitespace> tokenizer(aValue, ',', nsCharSeparatedTokenizer::SEPARATOR_OPTIONAL); nsAutoCString str; // outside loop to minimize memory churn while (tokenizer.hasMoreTokens()) { CopyUTF16toUTF8(tokenizer.nextToken(), str); // NS_ConvertUTF16toUTF8 const char *token = str.get(); if (*token == '\0') { return NS_ERROR_DOM_SYNTAX_ERR; // nothing between commas } char *end; float num = float(PR_strtod(token, &end)); if (*end != '\0' || !NS_finite(num)) { return NS_ERROR_DOM_SYNTAX_ERR; } if (!temp.AppendItem(num)) { return NS_ERROR_OUT_OF_MEMORY; } } if (tokenizer.lastTokenEndedWithSeparator()) { return NS_ERROR_DOM_SYNTAX_ERR; // trailing comma } return CopyFrom(temp); }
nsresult SVGNumberList::SetValueFromString(const nsAString& aValue) { SVGNumberList temp; nsCharSeparatedTokenizerTemplate<IsSVGWhitespace> tokenizer(aValue, ',', nsCharSeparatedTokenizer::SEPARATOR_OPTIONAL); while (tokenizer.hasMoreTokens()) { float num; if (!SVGContentUtils::ParseNumber(tokenizer.nextToken(), num)) { return NS_ERROR_DOM_SYNTAX_ERR; } if (!temp.AppendItem(num)) { return NS_ERROR_OUT_OF_MEMORY; } } if (tokenizer.separatorAfterCurrentToken()) { return NS_ERROR_DOM_SYNTAX_ERR; // trailing comma } return CopyFrom(temp); }