You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by "Steven J. Hathaway (JIRA)" <ji...@apache.org> on 2013/09/24 23:35:04 UTC
[jira] [Commented] (XALANC-744) XalanLocator::getSystemId() can
return NULL, cause crash
[ https://issues.apache.org/jira/browse/XALANC-744?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13776778#comment-13776778 ]
Steven J. Hathaway commented on XALANC-744:
-------------------------------------------
Patch committed to resolve this issue.
getSystemId() now either returns getSystemId() or the empty string.
It no longer causes a return of getPublicId.
- Steve Hathaway
> XalanLocator::getSystemId() can return NULL, cause crash
> --------------------------------------------------------
>
> Key: XALANC-744
> URL: https://issues.apache.org/jira/browse/XALANC-744
> Project: XalanC
> Issue Type: Bug
> Components: XalanC
> Affects Versions: 1.11
> Environment: Windows, Visual Studio 2010
> Reporter: Michael Chisholm
> Assignee: Steven J. Hathaway
> Priority: Critical
>
> I think this is a copy-paste bug, introduced in r1388736:
> Index: XalanLocator.hpp
> ===================================================================
> --- XalanLocator.hpp (revision 1388735)
> +++ XalanLocator.hpp (revision 1388736)
> @@ -67,17 +67,19 @@
> static const XalanDOMChar*
> getPublicId(
> const Locator* theLocator,
> - const XalanDOMChar* theAlternateId = 0)
> + const XalanDOMChar* theAlternateId = &s_dczero)
> {
> - return theLocator == 0 ? theAlternateId : theLocator->getPublicId();
> + return theLocator == 0 ? theAlternateId : (theLocator->getPublicId() ?
> + theLocator->getPublicId() : theAlternateId);
> }
> static const XalanDOMChar*
> getSystemId(
> const Locator* theLocator,
> - const XalanDOMChar* theAlternateId = 0)
> + const XalanDOMChar* theAlternateId = &s_dczero)
> {
> - return theLocator == 0 ? theAlternateId : theLocator->getSystemId();
> + return theLocator == 0 ? theAlternateId : (theLocator->getSystemId() ?
> + theLocator->getPublicId() : theAlternateId);
> }
> static XalanFileLoc
> @@ -122,6 +124,8 @@
> XalanLocator&
> operator=(const XalanLocator&);
> +
> + const static XalanDOMChar s_dczero = 0;
> };
> Notice that in the getSystemId() method, theLocator->getPublicId() is called. I think that was meant to be theLocator->getSystemId(). This caused a crash when I used Xalan.exe because it sets up its XSLTInputSources with system Ids, but not public Ids. Then, during transformation, XalanLocator::getSystemId() is called, which returns the NULL public Id, which is passed to the XalamDomString constructor, which causes the crash.
> I just switched the call to theLocator->getSystemId() and the crash disappeared.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@xalan.apache.org
For additional commands, e-mail: dev-help@xalan.apache.org