termux / termux-app

Termux - a terminal emulator application for Android OS extendible by variety of packages.
https://f-droid.org/en/packages/com.termux
Other
35.8k stars 3.76k forks source link

Problems with sharing large terminal transcript #1166

Closed ghost closed 5 years ago

ghost commented 5 years ago

Problem description When trying to share a large terminal transcript, application may do nothing or even crash.

It seems like Android puts some limits on data sent with intent. From experiments, it seems that max possible transcript size is around 128 KB.

Steps to reproduce

  1. Open new session.

  2. Fill console with some data. For example:

    dd if=/dev/zero bs=1M count=1 | tr '\0' 'A'
  3. From context menu click on button "Share transcript".

Expected behavior

Application should be able to share the transcript regardless of content size. If it is not possible to send whole transcript, it can be truncated to the reasonable size.

Additional information

Android log:

06-25 00:15:19.048 21822 21822 E JavaBinder: !!! FAILED BINDER TRANSACTION !!!  (parcel size = 2051700)
06-25 00:15:19.053 21822 21822 E AndroidRuntime: FATAL EXCEPTION: main
06-25 00:15:19.053 21822 21822 E AndroidRuntime: Process: com.termux, PID: 21822
06-25 00:15:19.053 21822 21822 E AndroidRuntime: java.lang.RuntimeException: Failure from system
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1624)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at android.app.Activity.startActivityForResult(Activity.java:4564)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at android.app.Activity.startActivityForResult(Activity.java:4522)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at android.app.Activity.startActivity(Activity.java:4883)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at android.app.Activity.startActivity(Activity.java:4851)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at com.termux.app.TermuxActivity.onContextItemSelected(SourceFile:28)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at android.app.Activity.onMenuItemSelected(Activity.java:3547)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at com.android.internal.policy.PhoneWindow$PhoneWindowMenuCallback.onMenuItemSelected(PhoneWindow.java:3996)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:761)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:172)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:908)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:898)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:178)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:1269)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at android.widget.AdapterView.performItemClick(AdapterView.java:350)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at android.widget.AbsListView.performItemClick(AbsListView.java:1683)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at android.widget.AbsListView$PerformClick.run(AbsListView.java:4094)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at android.widget.AbsListView$10.run(AbsListView.java:6583)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at android.os.Handler.handleCallback(Handler.java:789)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at android.os.Handler.dispatchMessage(Handler.java:98)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at android.os.Looper.loop(Looper.java:164)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at android.app.ActivityThread.main(ActivityThread.java:6944)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at java.lang.reflect.Method.invoke(Native Method)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
06-25 00:15:19.053 21822 21822 E AndroidRuntime: Caused by: android.os.TransactionTooLargeException: data parcel size 2051700 bytes
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at android.os.BinderProxy.transactNative(Native Method)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at android.os.BinderProxy.transact(Binder.java:761)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at android.app.IActivityManager$Stub$Proxy.startActivity(IActivityManager.java:4883)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1617)
06-25 00:15:19.053 21822 21822 E AndroidRuntime:    ... 24 more
ghost commented 5 years ago

Fixed in https://github.com/termux/termux-app/commit/445da0c4eaf1c699b10c5963f95440df6c8abdce + https://github.com/termux/termux-app/commit/370ac2bd8911b5632933975300e779f722ad03af.

diehard88 commented 5 years ago

@xeffyr .... thx!