Database corrupted while inserting big string

Wednesday, 7 January 2015 · 2 messages · last reply 8 Jan 2015
JM
jean-marc Mercier7 Jan 2015 08:15 #
Hello, I am trying to insert big string into BaseX, and ended corrupting the whole database. Here a test code , can you reproduce it ?
declare updating function local:dbtest($db as xs:string) {
    db:replace($db,"map",<map>{fn:serialize(1 to 10000000)}</map>)
};

local:dbtest("MyDataBase")
output : Improper use? Potential bug? Your feedback is welcome: Contact: basex-talk at mailman.uni-konstanz.de Version: BaseX 8.0 beta 769b53b Java: Oracle Corporation, 1.8.0_25 OS: Windows 7, amd64 Stack Trace:
java.lang.IndexOutOfBoundsException
at java.io.RandomAccessFile.writeBytes(Native Method)
at java.io.RandomAccessFile.write(Unknown Source)
at org.basex.io.random.DataAccess.writeBlock(DataAccess.java:448)
at org.basex.io.random.DataAccess.flush(DataAccess.java:49)
at org.basex.io.random.DataAccess.close(DataAccess.java:61)
at org.basex.data.DiskData.close(DiskData.java:151)
at org.basex.core.cmd.Close.close(Close.java:45)
at org.basex.query.QueryResources.close(QueryResources.java:110)
at org.basex.query.QueryContext.close(QueryContext.java:564)
at org.basex.query.QueryProcessor.close(QueryProcessor.java:235)
at org.basex.core.cmd.AQuery.query(AQuery.java:129)
at org.basex.core.cmd.XQuery.run(XQuery.java:22)
at org.basex.core.Command.run(Command.java:379)
at org.basex.core.Command.execute(Command.java:95)
at org.basex.api.client.LocalSession.execute(LocalSession.java:132)
at org.basex.api.client.Session.execute(Session.java:36)
at org.basex.core.CLI.execute(CLI.java:106)
at org.basex.BaseX.<init>(BaseX.java:124)
at org.basex.BaseX.main(BaseX.java:42)
CG
Christian Grün8 Jan 2015 16:19 #
The bug (which occur in some instances if very large strings were stored) has been fixed in the latest snapshot [1]. Thanks, Christian [1] http://files.basex.org/releases/latest
Quoted text · jean-marc Mercier · 43 lines
On Wed, Jan 7, 2015 at 8:15 AM, jean-marc Mercier <jeanmarc.mercier at gmail.com> wrote: > Hello, > > I am trying to insert big string into BaseX, and ended corrupting the whole > database. Here a test code , can you reproduce it ? > > declare updating function local:dbtest($db as xs:string) { > db:replace($db,"map",<map>{fn:serialize(1 to 10000000)}</map>) > }; > > local:dbtest("MyDataBase") > > output : > > Improper use? Potential bug? Your feedback is welcome: > Contact: basex-talk at mailman.uni-konstanz.de > Version: BaseX 8.0 beta 769b53b > Java: Oracle Corporation, 1.8.0_25 > OS: Windows 7, amd64 > Stack Trace: > java.lang.IndexOutOfBoundsException > at java.io.RandomAccessFile.writeBytes(Native Method) > at java.io.RandomAccessFile.write(Unknown Source) > at org.basex.io.random.DataAccess.writeBlock(DataAccess.java:448) > at org.basex.io.random.DataAccess.flush(DataAccess.java:49) > at org.basex.io.random.DataAccess.close(DataAccess.java:61) > at org.basex.data.DiskData.close(DiskData.java:151) > at org.basex.core.cmd.Close.close(Close.java:45) > at org.basex.query.QueryResources.close(QueryResources.java:110) > at org.basex.query.QueryContext.close(QueryContext.java:564) > at org.basex.query.QueryProcessor.close(QueryProcessor.java:235) > at org.basex.core.cmd.AQuery.query(AQuery.java:129) > at org.basex.core.cmd.XQuery.run(XQuery.java:22) > at org.basex.core.Command.run(Command.java:379) > at org.basex.core.Command.execute(Command.java:95) > at org.basex.api.client.LocalSession.execute(LocalSession.java:132) > at org.basex.api.client.Session.execute(Session.java:36) > at org.basex.core.CLI.execute(CLI.java:106) > at org.basex.BaseX.<init>(BaseX.java:124) > at org.basex.BaseX.main(BaseX.java:42) > >

⚡Generated with XQuery