poppingmoon / aria

A cross-platform Misskey client built with Flutter
https://misskey.io/@aria_app
GNU Affero General Public License v3.0
126 stars 4 forks source link

Inline/Block Code MfM can cause visual bug #423

Closed DenialOfIntelligence closed 1 day ago

DenialOfIntelligence commented 1 day ago

💡 Summary

For example the text "`-<a`" causes this visual bug where instead of showing the text it shows a large gray box:

image

I have experimented a bit and here is what I have found to be required to trigger this:

🥰 Expected Behavior

I can see the text.

🤬 Actual Behavior

As explained previously the gray box appears. When occurring the terminal outputs:

flutter: RangeError (index): Invalid value: Not in inclusive range 0..2: 3
flutter: #0      _StringBase.[] (dart:core-patch/string_patch.dart:274)
flutter: #1      language_javascript_contains_0_contains_0_variants_0_onBegin (package:highlighting/src/callbacks.dart:35)
flutter: #2      HighlightV2.highlight.doBeginMatch (package:highlighting/src/highlightv2.dart:267)
flutter: #3      HighlightV2.highlight.processLexeme (package:highlighting/src/highlightv2.dart:356)
flutter: #4      HighlightV2.highlight (package:highlighting/src/highlightv2.dart:399)
flutter: #5      HighlightView.build (package:flutter_highlighting/flutter_highlighting.dart:97)
flutter: #6      StatelessElement.build (package:flutter/src/widgets/framework.dart:5687)
flutter: #7      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5617)
flutter: #8      Element.rebuild (package:flutter/src/widgets/framework.dart:5333)
flutter: #9      ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5599)
flutter: #10     ComponentElement.mount (package:flutter/src/widgets/framework.dart:5593)
flutter: #11     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468)
flutter: #12     Element.updateChild (package:flutter/src/widgets/framework.dart:3963)
flutter: #13     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6900)
flutter: #14     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468)
flutter: #15     Element.updateChild (package:flutter/src/widgets/framework.dart:3963)
flutter: #16     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6900)
flutter: #17     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468)
flutter: #18     Element.updateChild (package:flutter/src/widgets/framework.dart:3963)
flutter: #19     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6900)
flutter: #20     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468)
flutter: #21     Element.updateChild (package:flutter/src/widgets/framework.dart:3963)
flutter: #22     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6900)
flutter: #23     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468)
flutter: #24     Element.updateChild (package:flutter/src/widgets/framework.dart:3963)
flutter: #25     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6900)
flutter: #26     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468)
flutter: #27     Element.updateChild (package:flutter/src/widgets/framework.dart:3963)
flutter: #28     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642)
flutter: #29     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5780)
flutter: #30     Element.rebuild (package:flutter/src/widgets/framework.dart:5333)
flutter: #31     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5599)
flutter: #32     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5771)
flutter: #33     ComponentElement.mount (package:flutter/src/widgets/framework.dart:5593)
flutter: #34     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468)
flutter: #35     Element.updateChild (package:flutter/src/widgets/framework.dart:3963)
flutter: #36     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6900)
flutter: #37     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468)
flutter: #38     Element.updateChild (package:flutter/src/widgets/framework.dart:3963)
flutter: #39     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642)
flutter: #40     Element.rebuild (package:flutter/src/widgets/framework.dart:5333)
flutter: #41     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5599)
flutter: #42     ComponentElement.mount (package:flutter/src/widgets/framework.dart:5593)
flutter: #43     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468)
flutter: #44     Element.updateChild (package:flutter/src/widgets/framework.dart:3963)
flutter: #45     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6900)
flutter: #46     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468)
flutter: #47     Element.updateChild (package:flutter/src/widgets/framework.dart:3963)
flutter: #48     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642)
flutter: #49     Element.rebuild (package:flutter/src/widgets/framework.dart:5333)
flutter: #50     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5599)
flutter: #51     ComponentElement.mount (package:flutter/src/widgets/framework.dart:5593)
flutter: #52     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468)
flutter: #53     Element.updateChild (package:flutter/src/widgets/framework.dart:3963)
flutter: #54     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642)
flutter: #55     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5780)
flutter: #56     Element.rebuild (package:flutter/src/widgets/framework.dart:5333)
flutter: #57     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5599)
flutter: #58     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5771)
flutter: #59     ComponentElement.mount (package:flutter/src/widgets/framework.dart:5593)
flutter: #60     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468)
flutter: #61     Element.updateChild (package:flutter/src/widgets/framework.dart:3963)
flutter: #62     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642)
flutter: #63     Element.rebuild (package:flutter/src/widgets/framework.dart:5333)
flutter: #64     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5599)
flutter: #65     ComponentElement.mount (package:flutter/src/widgets/framework.dart:5593)
flutter: #66     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468)
flutter: #67     Element.updateChild (package:flutter/src/widgets/framework.dart:3963)
flutter: #68     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6900)
flutter: #69     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468)
flutter: #70     Element.updateChild (package:flutter/src/widgets/framework.dart:3963)
flutter: #71     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642)
flutter: #72     Element.rebuild (package:flutter/src/widgets/framework.dart:5333)
flutter: #73     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5599)
flutter: #74     ComponentElement.mount (package:flutter/src/widgets/framework.dart:5593)
flutter: #75     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468)
flutter: #76     Element.updateChild (package:flutter/src/widgets/framework.dart:3963)
flutter: #77     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6900)
flutter: #78     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468)
flutter: #79     Element.updateChild (package:flutter/src/widgets/framework.dart:3963)
flutter: #80     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642)
flutter: #81     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5780)
flutter: #82     Element.rebuild (package:flutter/src/widgets/framework.dart:5333)
flutter: #83     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5599)
flutter: #84     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5771)
flutter: #85     ComponentElement.mount (package:flutter/src/widgets/framework.dart:5593)
flutter: #86     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468)
flutter: #87     Element.updateChild (package:flutter/src/widgets/framework.dart:3963)
flutter: #88     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642)
flutter: #89     Element.rebuild (package:flutter/src/widgets/framework.dart:5333)
flutter: #90     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5599)
flutter: #91     ComponentElement.mount (package:flutter/src/widgets/framework.dart:5593)
flutter: #92     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468)
flutter: #93     Element.updateChild (package:flutter/src/widgets/framework.dart:3963)
flutter: #94     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6900)
flutter: #95     Element.inflateWidget (package:flutter/src/widgets/framework.dart:4468)
flutter: #96     Element.updateChild (package:flutter/src/widgets/framework.dart:3963)
flutter: #97     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5642)
flutter: #98     Element.rebuild (package:flutter/src/widgets/framework.dart:5333)
flutter: #99     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5599)

Any time this is triggered again:

flutter: Another exception was thrown: Instance of 'DiagnosticsProperty<void>'

📝 Steps to Reproduce

  1. Get a post which contains text that matches the previously stated requirements or make one yourself e.g. this post which caused me to notice this bug
  2. Look at said post in aria
  3. That's it you now a big gray box!

💻 Environment

* Model and OS of the device(s): Pixel 3a, Android 14; Linux Pc
* Aria: 0.15.0 Android/0.15.1 Pc
* Server URL: plasmatrap.com
* Sharkey: v2024.9.1-dev

Do you want to address this bug yourself?

poppingmoon commented 1 day ago

Thank you for reporting this.

I think this is a bug from https://github.com/ahmadf45/dart-highlighting, which is used for syntax highlighting of the codes.

I am not sure how it works and I don't know what is the real cause of this bug, but the error says it is accessing a character out of range. So I forked the package and added a small change to avoid the invalid index access. With #425, `-<a` renders correctly.