matrix-org / matrix-appservice-irc

Node.js IRC bridge for Matrix
Apache License 2.0
462 stars 151 forks source link

Editing messages to add a link mangles the link #1577

Open progval opened 2 years ago

progval commented 2 years ago

Describe the bug

The diff algorithm adds stars in the middle of message diffs

To Reproduce Steps to reproduce the behavior:

  1. Post "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet"
  2. Edit to replace "non risus" with a link (eg. to https://riot.im/app/ )

This happens on IRC:

17:09:49 <val-m> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet
17:10:07 <val-m> * elit. Sed [non risus, * non risus](https://riot., * .im/app/). Suspendisse

Expected behavior

17:09:49 <val-m> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet
17:10:07 <val-m> * elit. Sed [non risus](https://riot.im/app/). Suspendisse

or:

17:09:49 <val-m> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet
17:10:07 <val-m> non risus: https://riot.im/app/

(which would be more idiomatic)

Additional context

Here is the source of the Matrix event:

{
    "body": " * Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed [non risus](https://riot.im/app/). Suspendisse lectus tortor, dignissim sit amet",
    "format": "org.matrix.custom.html",
    "formatted_body": " * Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed <a href=\"https://riot.im/app/\">non risus</a>. Suspendisse lectus tortor, dignissim sit amet",
    "m.new_content": {
      "body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed [non risus](https://riot.im/app/). Suspendisse lectus tortor, dignissim sit amet",
      "format": "org.matrix.custom.html",
      "formatted_body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed <a href=\"https://riot.im/app/\">non risus</a>. Suspendisse lectus tortor, dignissim sit amet",
      "msgtype": "m.text",
      "org.matrix.msc1767.message": [
        {
          "body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed [non risus](https://riot.im/app/). Suspendisse lectus tortor, dignissim sit amet",
          "mimetype": "text/plain"
        },
        {
          "body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed <a href=\"https://riot.im/app/\">non risus</a>. Suspendisse lectus tortor, dignissim sit amet",
          "mimetype": "text/html"
        }
      ]
    },
    "m.relates_to": {
      "event_id": "$pphdmPEyQaRoozalP-mmhafog-XIfXPo6AtCxRz8vTI",
      "rel_type": "m.replace"
    },
    "msgtype": "m.text",
    "org.matrix.msc1767.message": [
      {
        "body": " * Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed [non risus](https://riot.im/app/). Suspendisse lectus tortor, dignissim sit amet",
        "mimetype": "text/plain"
      },
      {
        "body": " * Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed <a href=\"https://riot.im/app/\">non risus</a>. Suspendisse lectus tortor, dignissim sit amet",
        "mimetype": "text/html"
      }
    ]
  }
progval commented 2 years ago

another example, when removing link text:

13:36:05 <wsdjeg[m]> in other room, for example [#](#neovim:matrix.org) it is 0
13:36:15 <wsdjeg[m]> s/[//, s/](#//, s/)//