summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXiaohong Bao <bao@lindenlab.com>2011-11-28 11:33:49 -0700
committerXiaohong Bao <bao@lindenlab.com>2011-11-28 11:33:49 -0700
commit2851cd519338ef4a1fde15da8d4015ab4380d6cb (patch)
treee293f42016c3ce1a8e7ddb0f015ba72287381f33
parentbe3c6747a88d8bbb2c6b87c9eb97b14a42b90ae7 (diff)
a try fix for sh-2651: [crashhunters] Crash after google translate failure
and sh-2658: crash in LLPluginMessage::parse
-rw-r--r--indra/llprimitive/llvolumexml.cpp19
-rw-r--r--indra/llprimitive/llvolumexml.h6
-rw-r--r--indra/llui/llui.cpp7
-rw-r--r--indra/llxml/llxmlnode.cpp8
-rw-r--r--indra/llxuixml/llxuiparser.cpp1
-rw-r--r--indra/newview/llvoicevivox.cpp1
6 files changed, 24 insertions, 18 deletions
diff --git a/indra/llprimitive/llvolumexml.cpp b/indra/llprimitive/llvolumexml.cpp
index f4f9d4d713..bf2297a029 100644
--- a/indra/llprimitive/llvolumexml.cpp
+++ b/indra/llprimitive/llvolumexml.cpp
@@ -34,9 +34,9 @@
//============================================================================
-LLXMLNode *LLVolumeXml::exportProfileParams(const LLProfileParams* params)
+LLPointer<LLXMLNode> LLVolumeXml::exportProfileParams(const LLProfileParams* params)
{
- LLXMLNode *ret = new LLXMLNode("profile", FALSE);
+ LLPointer<LLXMLNode> ret = new LLXMLNode("profile", FALSE);
ret->createChild("curve_type", TRUE)->setByteValue(1, &params->getCurveType());
ret->createChild("interval", FALSE)->setFloatValue(2, &params->getBegin());
@@ -46,9 +46,9 @@ LLXMLNode *LLVolumeXml::exportProfileParams(const LLProfileParams* params)
}
-LLXMLNode *LLVolumeXml::exportPathParams(const LLPathParams* params)
+LLPointer<LLXMLNode> LLVolumeXml::exportPathParams(const LLPathParams* params)
{
- LLXMLNode *ret = new LLXMLNode("path", FALSE);
+ LLPointer<LLXMLNode> ret = new LLXMLNode("path", FALSE);
ret->createChild("curve_type", TRUE)->setByteValue(1, &params->getCurveType());
ret->createChild("interval", FALSE)->setFloatValue(2, &params->getBegin());
ret->createChild("scale", FALSE)->setFloatValue(2, params->getScale().mV);
@@ -63,12 +63,15 @@ LLXMLNode *LLVolumeXml::exportPathParams(const LLPathParams* params)
}
-LLXMLNode *LLVolumeXml::exportVolumeParams(const LLVolumeParams* params)
+LLPointer<LLXMLNode> LLVolumeXml::exportVolumeParams(const LLVolumeParams* params)
{
- LLXMLNode *ret = new LLXMLNode("shape", FALSE);
+ LLPointer<LLXMLNode> ret = new LLXMLNode("shape", FALSE);
- exportPathParams(&params->getPathParams())->setParent(ret);
- exportProfileParams(&params->getProfileParams())->setParent(ret);
+ LLPointer<LLXMLNode> node ;
+ node = exportPathParams(&params->getPathParams()) ;
+ node->setParent(ret);
+ node = exportProfileParams(&params->getProfileParams()) ;
+ node->setParent(ret);
return ret;
}
diff --git a/indra/llprimitive/llvolumexml.h b/indra/llprimitive/llvolumexml.h
index 5e79205d9a..9d4d989475 100644
--- a/indra/llprimitive/llvolumexml.h
+++ b/indra/llprimitive/llvolumexml.h
@@ -34,11 +34,11 @@
class LLVolumeXml
{
public:
- static LLXMLNode* exportProfileParams(const LLProfileParams* params);
+ static LLPointer<LLXMLNode> exportProfileParams(const LLProfileParams* params);
- static LLXMLNode* exportPathParams(const LLPathParams* params);
+ static LLPointer<LLXMLNode> exportPathParams(const LLPathParams* params);
- static LLXMLNode* exportVolumeParams(const LLVolumeParams* params);
+ static LLPointer<LLXMLNode> exportVolumeParams(const LLVolumeParams* params);
};
#endif // LL_LLVOLUMEXML_H
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index 79ad99a770..69461ec099 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -1823,9 +1823,12 @@ void LLUI::setupPaths()
LLXMLNodePtr root;
BOOL success = LLXMLNode::parseFile(filename, root, NULL);
Paths paths;
- LLXUIParser parser;
- parser.readXUI(root, paths, filename);
+ if(success)
+ {
+ LLXUIParser parser;
+ parser.readXUI(root, paths, filename);
+ }
sXUIPaths.clear();
if (success && paths.validateBlock())
diff --git a/indra/llxml/llxmlnode.cpp b/indra/llxml/llxmlnode.cpp
index 4362c88c4e..2b4a0fc2a1 100644
--- a/indra/llxml/llxmlnode.cpp
+++ b/indra/llxml/llxmlnode.cpp
@@ -693,7 +693,7 @@ bool LLXMLNode::parseFile(const std::string& filename, LLXMLNodePtr& node, LLXML
LLFILE* fp = LLFile::fopen(filename, "rb"); /* Flawfinder: ignore */
if (fp == NULL)
{
- node = new LLXMLNode();
+ node = NULL ;
return false;
}
fseek(fp, 0, SEEK_END);
@@ -746,7 +746,7 @@ bool LLXMLNode::parseBuffer(
{
llwarns << "Parse failure - wrong number of top-level nodes xml."
<< llendl;
- node = new LLXMLNode();
+ node = NULL ;
return false;
}
@@ -805,7 +805,7 @@ bool LLXMLNode::parseStream(
{
llwarns << "Parse failure - wrong number of top-level nodes xml."
<< llendl;
- node = new LLXMLNode();
+ node = NULL;
return false;
}
@@ -1206,7 +1206,7 @@ bool LLXMLNode::getChild(const LLStringTableEntry* name, LLXMLNodePtr& node, BOO
{
return mDefault->getChild(name, node, FALSE);
}
- node = new LLXMLNode();
+ node = NULL;
return false;
}
diff --git a/indra/llxuixml/llxuiparser.cpp b/indra/llxuixml/llxuiparser.cpp
index 878f992178..5a525f84a8 100644
--- a/indra/llxuixml/llxuiparser.cpp
+++ b/indra/llxuixml/llxuiparser.cpp
@@ -1247,6 +1247,7 @@ bool LLSimpleXUIParser::readXUI(const std::string& filename, LLInitParam::BaseBl
if( !file.isOpen() )
{
LL_WARNS("ReadXUI") << "Unable to open file " << filename << LL_ENDL;
+ XML_ParserFree( mParser );
return false;
}
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index 8ecf4a80b7..2d7437f4f3 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -7020,7 +7020,6 @@ void LLVivoxVoiceClient::captureBufferPlayStopSendMessage()
LLVivoxProtocolParser::LLVivoxProtocolParser()
{
- parser = NULL;
parser = XML_ParserCreate(NULL);
reset();