IVY throws IOException when ivy.xml file is larger than 10000 bytes
-------------------------------------------------------------------
Key: IVY-1289
URL: https://issues.apache.org/jira/browse/IVY-1289
Project: Ivy
Issue Type: Bug
Components: Core
Affects Versions: 2.2.0
Environment: All environments
Reporter: Martin Wursthorn
We habe an ivy.xml file which is 10060 bytes large. It starts with an
'<ivy-module>'
tag, there is no xml header before this tag. When processing this file we get
the following error:
{noformat}
java.io.IOException: Resetting to invalid mark
at java.io.BufferedInputStream.reset(BufferedInputStream.java:416)
at
org.apache.ivy.plugins.parser.xml.XmlModuleDescriptorUpdater.update(XmlModuleDescriptorUpdater.java:1215)
at
org.apache.ivy.plugins.parser.xml.XmlModuleDescriptorUpdater.update(XmlModuleDescriptorUpdater.java:147)
at
org.apache.ivy.plugins.parser.xml.XmlModuleDescriptorParser.toIvyFile(XmlModuleDescriptorParser.java:153)
at
org.apache.ivy.core.module.descriptor.DefaultModuleDescriptor.toIvyFile(DefaultModuleDescriptor.java:547)
at
org.apache.ivy.core.resolve.ResolveEngine.resolve(ResolveEngine.java:248)
at
org.apache.ivy.core.resolve.ResolveEngine.resolve(ResolveEngine.java:195)
at org.apache.ivy.Ivy.resolve(Ivy.java:502)
at org.apache.ivy.ant.IvyResolve.doExecute(IvyResolve.java:244)
at org.apache.ivy.ant.IvyTask.execute(IvyTask.java:277)
at
org.apache.ivy.ant.IvyPostResolveTask.ensureResolved(IvyPostResolveTask.java:217)
at
org.apache.ivy.ant.IvyPostResolveTask.prepareAndCheck(IvyPostResolveTask.java:164)
at org.apache.ivy.ant.IvyRetrieve.doExecute(IvyRetrieve.java:57)
at org.apache.ivy.ant.IvyTask.execute(IvyTask.java:277)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:390)
at org.apache.tools.ant.Target.performTasks(Target.java:411)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1360)
at org.apache.tools.ant.Project.executeTarget(Project.java:1329)
at
org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1212)
at org.apache.tools.ant.Main.runBuild(Main.java:801)
at org.apache.tools.ant.Main.startAnt(Main.java:218)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
{noformat}
Theproblem seem to be the following block of code in XmlModuleDescriptorUpdater:
{code}
in.mark(MAX_HEADER_LENGTH); // assume the header is never larger than 10000
bytes.
copyHeader(in, out);
in.reset(); // reposition the stream at the beginning
{code}
The first line sets markpos to 0, and readLimit to 10000. But after the call to
copyHeader the position pointer
is set to the end of the file not just the end of the header. Since this
position is beyond 10000 markpos is set
to -1 and the above exception is thrown. Note that in our case the header is
empty.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira