owncloud / owncloud/android

[BUG] Crash when big txt file is previewed

Open
#4,915 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Contributions are welcome Crash Type:bug
Dominant language
Kotlin
Stars
4.2k
Forks
3.1k
Avg merge
1d 12h
Merged PRs (30d)
7

Description

Could be related with https://github.com/owncloud/android/issues/3794

Steps to reproduce
  1. Create a big txt file (~30MB)
  2. In app, open it
Actual behaviour

Spinner of waiting... and finally a crash. Stacktrace:

Process: com.owncloud.android.debug, PID: 16420
                 java.lang.OutOfMemoryError: Failed to allocate a 16 byte allocation with 2240160 free bytes and 2187KB until OOM, target footprint 268435456, growth limit 268435456; giving up on allocation because <1% of heap free after GC.
                 	at android.text.MeasuredParagraph.<init>(MeasuredParagraph.java:129)
                 	at android.text.MeasuredParagraph.obtain(MeasuredParagraph.java:80)
                 	at android.text.MeasuredParagraph.buildForStaticLayoutInternal(MeasuredParagraph.java:596)
                 	at android.text.MeasuredParagraph.buildForStaticLayout(MeasuredParagraph.java:543)
                 	at android.text.PrecomputedText.createMeasuredParagraphs(PrecomputedText.java:526)
                 	at android.text.StaticLayout.generate(StaticLayout.java:886)
                 	at android.text.StaticLayout.<init>(StaticLayout.java:733)
                 	at android.text.StaticLayout.<init>(StaticLayout.java:0)
                 	at android.text.StaticLayout$Builder.build(StaticLayout.java:547)
                 	at android.widget.TextView.makeSingleLayout(TextView.java:11216)
                 	at android.widget.TextView.makeNewLayout(TextView.java:10992)
                 	at android.widget.TextView.onMeasure(TextView.java:11442)
                 	at androidx.appcompat.widget.AppCompatTextView.onMeasure(AppCompatTextView.java:615)
                 	at android.view.View.measure(View.java:29423)
                 	at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1533)
                 	at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                 	at android.widget.ScrollView.onMeasure(ScrollView.java:474)
                 	at android.view.View.measure(View.java:29423)
                 	at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:735)
                 	at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:481)
                 	at android.view.View.measure(View.java:29423)
                 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7068)
                 	at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                 	at android.view.View.measure(View.java:29423)
                 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7068)
                 	at androidx.coordinatorlayout.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:760)
                 	at androidx.coordinatorlayout.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:833)
                 	at android.view.View.measure(View.java:29423)
                 	at androidx.constraintlayout.widget.ConstraintLayout$Measurer.measure(ConstraintLayout.java:811)
                 	at androidx.constraintlayout.core.widgets.ConstraintWidgetContainer.measure(ConstraintWidgetContainer.java:632)
                 	at androidx.constraintlayout.core.widgets.analyzer.Direct.verticalSolvingPass(Direct.java:452)
                 	at androidx.constraintlayout.core.widgets.analyzer.Direct.solveVerticalMatchConstraint(Direct.java:750)
                 	at androidx.constraintlayout.core.widgets.analyzer.Direct.verticalSolvingPass(Direct.java:503)
                 	at androidx.constraintlayout.core.widgets.analyzer.Direct.verticalSolvingPass(Direct.java:542)
                 	at androidx.constraintlayout.core.widgets.analyzer.Direct.solvingPass(Direct.java:224)
                 	at androidx.constraintlayout.core.widgets.ConstraintWidgetContainer.layout(ConstraintWidgetContainer.java:693)
                 	at androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.solveLinearSystem(BasicMeasure.java:160)
                 	at androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.solverMeasure(BasicMeasure.java:291)
                 	at androidx.constraintlayout.core.widgets.ConstraintWidgetContainer.measure(ConstraintWidgetContainer.java:120)
                 	at androidx.constraintlayout.widget.ConstraintLayout.resolveSystem(ConstraintLayout.java:1594)
                 	at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1708)
                 	at android.view.View.measure(View.java:29423)
                 	at androidx.drawerlayout.widget.DrawerLayout.onMeasure(DrawerLayout.java:1156)
                 	at android.view.View.measure(View.java:29423)
                 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7068)
                 	at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                 	at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:145)
                 	at android.view.View.measure(View.java:29423)
                 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7068)
09:48:23.297  I  Process is going to kill itself!
                 java.lang.Exception
                 	at android.os.Process.killProcess(Process.java:1495)
                 	at com.android.internal.os.RuntimeInit$KillApplicationHandler.uncaughtException(RuntimeInit.java:193)
                 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1098)
                 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1093)
                 	at java.lang.Thread.dispatchUncaughtException(Thread.java:3387)
Expected behaviour

File correctly opened

Reproducible with any Android version and backend.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the text-preview flow and the Android TextView, ScrollView, and StaticLayout measurement frames shown in the stack trace. Reproduce the crash with a roughly 30 MB TXT file, then verify that large text opens without an OutOfMemoryError on Android versions and backends.

Written by the indexing model from the issue text.

Assessment

Tech stack
kotlin
Domain
mobile-dev
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.