azure-sdk-for-java: [BUG] IndexOutOfBoundsException during read from input stream
Describe the bug
Under unknown conditions reading from InputStream, opened on existing blob, causes IndexOutOfBoundsException in ByteBuffer#checkBounds.
Exception or Stack Trace
checkBounds:567, Buffer (java.nio)
get:149, HeapByteBuffer (java.nio)
readInternal:329, StorageInputStream (com.azure.storage.common)
read:289, StorageInputStream (com.azure.storage.common)
readFully:24, FileInfoAsSeekable (org.jetbrains.hdfsplugin.hdfs.localcache.orcsupport)
readFully:111, FSDataInputStream (org.apache.hadoop.fs)
readRanges:99, JetbrainsOrcDataReader (org.jetbrains.hdfsplugin.hdfs.localcache.orcsupport)
readFileData:62, JetbrainsOrcDataReader (org.jetbrains.hdfsplugin.hdfs.localcache.orcsupport)
readData:151, StripePlanner (org.apache.orc.impl.reader)
readStripe:190, JetbrainsOrcRecordReader (org.jetbrains.hdfsplugin.hdfs.localcache.orcsupport)
advanceStripe:159, JetbrainsOrcRecordReader (org.jetbrains.hdfsplugin.hdfs.localcache.orcsupport)
advanceToNextRow:137, JetbrainsOrcRecordReader (org.jetbrains.hdfsplugin.hdfs.localcache.orcsupport)
<init>:89, JetbrainsOrcRecordReader (org.jetbrains.hdfsplugin.hdfs.localcache.orcsupport)
readBatch:130, ORCContentDownloader (org.jetbrains.hdfsplugin.hdfs.localcache)
writeCsv:43, ORCContentDownloader (org.jetbrains.hdfsplugin.hdfs.localcache)
download:38, ORCContentDownloader (org.jetbrains.hdfsplugin.hdfs.localcache)
compute:86, RfsFileContentManager$downloadFilePart$1 (com.jetbrains.bigdatatools.rfs.localcache)
compute:17, RfsFileContentManager$downloadFilePart$1 (com.jetbrains.bigdatatools.rfs.localcache)
lambda$runProcess$3:179, CoreProgressManager (com.intellij.openapi.progress.impl)
run:-1, 1806785439 (com.intellij.openapi.progress.impl.CoreProgressManager$$Lambda$878)
lambda$runProcess$2:163, CoreProgressManager (com.intellij.openapi.progress.impl)
run:-1, 115725296 (com.intellij.openapi.progress.impl.CoreProgressManager$$Lambda$240)
registerIndicatorAndRun:585, CoreProgressManager (com.intellij.openapi.progress.impl)
executeProcessUnderProgress:531, CoreProgressManager (com.intellij.openapi.progress.impl)
executeProcessUnderProgress:59, ProgressManagerImpl (com.intellij.openapi.progress.impl)
runProcess:150, CoreProgressManager (com.intellij.openapi.progress.impl)
runProcess:179, CoreProgressManager (com.intellij.openapi.progress.impl)
downloadFilePart:85, RfsFileContentManager (com.jetbrains.bigdatatools.rfs.localcache)
getOrDownload:64, RfsFileContentManager (com.jetbrains.bigdatatools.rfs.localcache)
getOrDownload$default:62, RfsFileContentManager (com.jetbrains.bigdatatools.rfs.localcache)
getContentFile:50, RfsFileContentManager (com.jetbrains.bigdatatools.rfs.localcache)
getContentFile$default:49, RfsFileContentManager (com.jetbrains.bigdatatools.rfs.localcache)
loadContent:106, GeneralContentTypeViewerBase (com.jetbrains.bigdatatools.rfs.view)
invoke:76, RfsAsyncFileTypeViewer$openViewer$$inlined$let$lambda$1 (com.jetbrains.bigdatatools.rfs.view)
invoke:71, RfsAsyncFileTypeViewer$openViewer$$inlined$let$lambda$1 (com.jetbrains.bigdatatools.rfs.view)
run:17, ThreadUtilsKt$executeOnPooledThread$1 (com.jetbrains.bigdatatools.util)
run:238, ApplicationImpl$1 (com.intellij.openapi.application.impl)
call:511, Executors$RunnableAdapter (java.util.concurrent)
run$$$capture:266, FutureTask (java.util.concurrent)
run:-1, FutureTask (java.util.concurrent)
- Async stack trace
<init>:151, FutureTask (java.util.concurrent)
newTaskFor:87, AbstractExecutorService (java.util.concurrent)
submit:111, AbstractExecutorService (java.util.concurrent)
executeOnPooledThread:220, ApplicationImpl (com.intellij.openapi.application.impl)
executeOnPooledThread:16, ThreadUtilsKt (com.jetbrains.bigdatatools.util)
openViewer:74, RfsAsyncFileTypeViewer (com.jetbrains.bigdatatools.rfs.view)
openViewer:34, FileTypeViewerManager (com.jetbrains.bigdatatools.rfs.view)
openViewer$default:33, FileTypeViewerManager (com.jetbrains.bigdatatools.rfs.view)
showContent:18, ShowFileContentAction$Companion (com.jetbrains.bigdatatools.rfs.projectview.actions)
navigate:15, RfsFileNode (com.jetbrains.bigdatatools.rfs.projectview.nodes)
navigateToSource:119, OpenSourceUtil (com.intellij.util)
navigate:74, OpenSourceUtil (com.intellij.util)
navigate:58, OpenSourceUtil (com.intellij.util)
navigate:51, OpenSourceUtil (com.intellij.util)
openSourcesFrom:19, OpenSourceUtil (com.intellij.util)
onDoubleClick:46, MyDoubleClickListener (com.jetbrains.bigdatatools.rfs.projectview)
onClick:30, DoubleClickListener (com.intellij.ui)
mouseReleased:59, ClickListener$1 (com.intellij.ui)
mouseReleased:290, AWTEventMulticaster (java.awt)
mouseReleased:289, AWTEventMulticaster (java.awt)
mouseReleased:289, AWTEventMulticaster (java.awt)
mouseReleased:289, AWTEventMulticaster (java.awt)
processMouseEvent:6539, Component (java.awt)
processMouseEvent:3324, JComponent (javax.swing)
processMouseEvent:391, Tree (com.intellij.ui.treeStructure)
processMouseEvent:43, DnDAwareTree (com.intellij.ide.dnd.aware)
processEvent:6304, Component (java.awt)
processEvent:2239, Container (java.awt)
dispatchEventImpl:4889, Component (java.awt)
dispatchEventImpl:2297, Container (java.awt)
dispatchEvent:4711, Component (java.awt)
retargetMouseEvent:4904, LightweightDispatcher (java.awt)
processMouseEvent:4535, LightweightDispatcher (java.awt)
dispatchEvent:4476, LightweightDispatcher (java.awt)
dispatchEventImpl:2283, Container (java.awt)
dispatchEventImpl:2746, Window (java.awt)
dispatchEvent:4711, Component (java.awt)
dispatchEventImpl:760, EventQueue (java.awt)
access$500:97, EventQueue (java.awt)
run:709, EventQueue$3 (java.awt)
run:703, EventQueue$3 (java.awt)
doPrivileged:-2, AccessController (java.security)
doIntersectionPrivilege:74, ProtectionDomain$JavaSecurityAccessImpl (java.security)
doIntersectionPrivilege:84, ProtectionDomain$JavaSecurityAccessImpl (java.security)
run:733, EventQueue$4 (java.awt)
run:731, EventQueue$4 (java.awt)
doPrivileged:-2, AccessController (java.security)
doIntersectionPrivilege:74, ProtectionDomain$JavaSecurityAccessImpl (java.security)
dispatchEvent:730, EventQueue (java.awt)
defaultDispatchEvent:908, IdeEventQueue (com.intellij.ide)
dispatchMouseEvent:846, IdeEventQueue (com.intellij.ide)
_dispatchEvent:778, IdeEventQueue (com.intellij.ide)
lambda$dispatchEvent$8:424, IdeEventQueue (com.intellij.ide)
computePrioritized:698, CoreProgressManager (com.intellij.openapi.progress.impl)
dispatchEvent:423, IdeEventQueue (com.intellij.ide)
pumpOneEventForFilters:205, EventDispatchThread (java.awt)
pumpEventsForFilter:116, EventDispatchThread (java.awt)
pumpEventsForHierarchy:105, EventDispatchThread (java.awt)
pumpEvents:101, EventDispatchThread (java.awt)
pumpEvents:93, EventDispatchThread (java.awt)
run:82, EventDispatchThread (java.awt)
To Reproduce I don’t have steps to reproduce, but I can give you any information you need.
Code Snippet Several potentially useful code snippets:
FileInfoAsSeekable#readFully:
override fun readFully(position: Long, buffer: ByteArray, offset: Int, length: Int) {
fileInfo
.readStream(position)!!
.use { it.read(buffer, offset, length) }
}
where it is input stream from blob, opened as
FileInfo#readStream:
client.openInputStream(BlobRange(offset), null)
where client is BlobClient.
By specification InputStream#read should read as much as possible until buffer is full or input stream is ended. But in debugger I can see moment when offset + size > length and at this moment execution fails inside ByteBuffer#get
While readFully is being called with
offset = 0
buffer = {byte[40182088]@24505}
length = 40182088
position = 31324
At some point it leads to ByteBuffer#get with
dst = {byte[40182088]@24505}
offset = 37748736
length = 4194304
which is obviously out of bounds (which leads o error). It easily can be seen from stack trace that there is no eny intermediate code between my readFully method and Azure’s read method and by spec it should not lead to errors.
Setup (please complete the following information):
- OS: Linux, Mac OS X
- IDE : IntelliJ
- Version of the Library used: 12.6.1
Information Checklist Kindly make sure that you have added all the following information above and checkoff the required fields otherwise we will treat the issuer as an incomplete report
- Bug Description Added
- Repro Steps Added
- Setup information Added
About this issue
- Original URL
- State: closed
- Created 4 years ago
- Comments: 22 (10 by maintainers)
Awesome! So glad to hear it! I am going to close this issue now. Please let us know if you need any more support.