ReadYou icon indicating copy to clipboard operation
ReadYou copied to clipboard

Crash after fresh install when importing OPML file: Canvas trying to draw too large bitmap

Open Mycroft-47 opened this issue 11 months ago • 2 comments

1. Environment

2. Describe the bug

After installing Read You (v0.11.1), I tried importing an OPML file exported from Fluent Reader on my PC. The app crashed immediately, throwing a java.lang.RuntimeException due to the Canvas attempting to draw a bitmap that’s too large (140935168 bytes). This happened right after a fresh install, and the file works fine in other apps.

3. Stack Trace

java.lang.RuntimeException: Canvas: trying to draw too large(140935168bytes) bitmap.
	at android.graphics.RecordingCanvas.throwIfCannotDraw(RecordingCanvas.java:266)
	at android.graphics.BaseRecordingCanvas.drawBitmap(BaseRecordingCanvas.java:97)
	at androidx.compose.ui.graphics.AndroidCanvas.drawImageRect-HPBpro0(AndroidCanvas.android.kt:93)
	at androidx.compose.ui.graphics.drawscope.CanvasDrawScope.drawImage-AZ2fEMs(CanvasDrawScope.kt:34)
	at androidx.compose.ui.node.LayoutNodeDrawScope.drawImage-AZ2fEMs(LayoutNodeDrawScope.kt:25)
	at androidx.compose.ui.graphics.drawscope.DrawScope.drawImage-AZ2fEMs$default(DrawScope.kt:103)
	at androidx.compose.ui.graphics.painter.BitmapPainter.onDraw(BitmapPainter.kt:51)
	at androidx.compose.ui.graphics.painter.Painter.draw-x_KDEd0(Painter.kt:123)
	at coil.compose.CrossfadePainter.drawPainter(CrossfadePainter.kt:127)
	at coil.compose.CrossfadePainter.onDraw(CrossfadePainter.kt:80)
	at androidx.compose.ui.graphics.painter.Painter.draw-x_KDEd0(Painter.kt:123)
	at coil.compose.AsyncImagePainter.onDraw(AsyncImagePainter.kt:46)
	at androidx.compose.ui.graphics.painter.Painter.draw-x_KDEd0(Painter.kt:123)
	at androidx.compose.ui.draw.PainterNode.draw(PainterModifier.kt:182)
	at androidx.compose.ui.node.LayoutNodeDrawScope.drawDirect-eZhPAX0$ui_release(LayoutNodeDrawScope.kt:50)
	at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:53)
	at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:28)
	at androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw(LayoutModifierNodeCoordinator.kt:6)
	at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:9)
	at androidx.compose.ui.node.NodeCoordinator$drawBlock$1$1.invoke(NodeCoordinator.kt:9)
	at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:114)
	at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:48)
	at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:136)
	at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:3)
	at androidx.compose.ui.node.NodeCoordinator$drawBlock$1.invoke(NodeCoordinator.kt:32)
	at androidx.compose.ui.platform.GraphicsLayerOwnerLayer$recordLambda$1.invoke(GraphicsLayerOwnerLayer.android.kt:23)
	at androidx.compose.ui.graphics.layer.GraphicsLayerV29.record(GraphicsLayerV29.android.kt:35)
	at androidx.compose.ui.graphics.layer.GraphicsLayer.recordInternal(AndroidGraphicsLayer.android.kt:44)
	at androidx.compose.ui.platform.GraphicsLayerOwnerLayer.updateDisplayList(GraphicsLayerOwnerLayer.android.kt:137)
	at androidx.compose.ui.platform.AndroidComposeView.dispatchDraw(AndroidComposeView.android.kt:100)
	at android.view.View.draw(View.java:23901)
	at android.view.View.updateDisplayListIfDirty(View.java:22767)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5339)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5311)
	at android.view.View.updateDisplayListIfDirty(View.java:22714)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5339)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5311)
	at android.view.View.updateDisplayListIfDirty(View.java:22714)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5339)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5311)
	at android.view.View.updateDisplayListIfDirty(View.java:22714)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5339)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5311)
	at android.view.View.updateDisplayListIfDirty(View.java:22714)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5339)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5311)
	at android.view.View.updateDisplayListIfDirty(View.java:22714)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5339)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5311)
	at android.view.View.updateDisplayListIfDirty(View.java:22714)
	at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:602)
	at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:608)
	at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:684)
	at android.view.ViewRootImpl.draw(ViewRootImpl.java:5440)
	at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:5148)
	at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:4212)
	at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2919)
	at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:10491)
	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1108)
	at android.view.Choreographer.doCallbacks(Choreographer.java:866)
	at android.view.Choreographer.doFrame(Choreographer.java:797)
	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1092)
	at android.os.Handler.handleCallback(Handler.java:938)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loopOnce(Looper.java:226)
	at android.os.Looper.loop(Looper.java:313)
	at android.app.ActivityThread.main(ActivityThread.java:8669)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)

Mycroft-47 avatar Jan 26 '25 05:01 Mycroft-47

I am also seeing this error. When I try to view Unread feeds against a FreshRSS account, the feeds list suddenly "slides" in a blank view before I can select one, and after a few seconds Android tells me the app is not responding. If I continue telling Android to "Wait", eventually the above stack trace appears with a similar complaint about a similarly-sized bitmap (over 110 MB).

I suspect that if I can consume or mark Read the offending feed (not sure which it is right now) in another client, then Read You may unblock itself..

AverageHelper avatar Mar 22 '25 19:03 AverageHelper

Update: found it, it was https://analognowhere.com/feed/rss.xml

Very like #693 and #780

AverageHelper avatar Mar 22 '25 19:03 AverageHelper