chrispanag
(Christos Panagiotakopoulos)
March 7, 2021, 9:40pm
1
When I try to edit the first post of this topic I get back an HTTP 500 error code. The error logs are reporting this fatal error happening:
Message (7 copies reported)
PG::StringDataRightTruncation (ERROR: value too long for type character varying(500)
)
app/models/topic_link.rb:240:in `safe_create_topic_link'
app/models/topic_link.rb:334:in `ensure_entry_for'
app/models/topic_link.rb:128:in `block (2 levels) in extract_from'
app/models/topic_link.rb:126:in `block in extract_from'
app/models/topic_link.rb:124:in `each'
app/models/topic_link.rb:124:in `extract_from'
lib/post_revisor.rb:224:in `revise!'
app/controllers/topics_controller.rb:379:in `update'
app/controllers/application_controller.rb:358:in `block in with_resolved_locale'
app/controllers/application_controller.rb:358:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:68:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:355:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:177:in `call'
Backtrace
rack-mini-profiler (2.3.1) lib/patches/db/pg.rb:113:in `exec'
rack-mini-profiler (2.3.1) lib/patches/db/pg.rb:113:in `async_exec'
mini_sql (1.0.1) lib/mini_sql/postgres/connection.rb:201:in `run'
mini_sql (1.0.1) lib/mini_sql/postgres/connection.rb:56:in `query_single'
app/models/topic_link.rb:240:in `safe_create_topic_link'
app/models/topic_link.rb:334:in `ensure_entry_for'
app/models/topic_link.rb:128:in `block (2 levels) in extract_from'
activerecord (6.0.3.3) lib/active_record/connection_adapters/abstract/database_statements.rb:280:in `block in transaction'
activerecord (6.0.3.3) lib/active_record/connection_adapters/abstract/transaction.rb:280:in `block in within_new_transaction'
activesupport (6.0.3.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize'
Env
HTTP HOSTS: rembetiko.gr
2 Likes
sam
(Sam Saffron)
March 8, 2021, 4:31am
2
Looks like something to do with the URL, it is longer than 500 chars.
We should certainly be truncating and possibly skipping, not result in a 500.
What is the longest URL in the post?
4 Likes
chrispanag
(Christos Panagiotakopoulos)
March 8, 2021, 9:27am
3
Thanks @sam ,
the only URL the post has is from a quote. The URL is this:
https://rembetiko.gr/t/%CE%BC%CE%B1%CE%BA%CE%AC%CE%BC-%CE%B2%CF%85%CE%B6%CE%B1%CE%BD%CF%84%CE%B9%CE%BD%CE%BF%CE%AF-%CE%B4%CF%81%CF%8C%CE%BC%CE%BF%CE%B9/6034/30
2 Likes
sam
(Sam Saffron)
March 8, 2021, 9:33am
4
That is only 159 chars … lets see what happens here:
Γιάννη, εκτός από τις ευχές μπου γιά Καλό Πάσχα, θέλω να πω πως πίστευα ότι το θέμα έχει λυθεί προ καιρού. Όχι μόνο από τα πρίμα-σεγκόντα και πέρα, αλλά ακόμα και στην Πειραιώτικη κομπανία, αλλά και σ΄ένα σεβαστό μέρος της Σμυρνέϊκης του Πειραιά...
Μακάμ - Βυζαντινοί Δρόμοι - #30 by kwstas_ferris - Παραδοσιακή Μουσική - Ρεμπέτικο Φόρουμ
So odd… unable to repro with that url.
Maybe somehow related to it being first post?
2 Likes
chrispanag
(Christos Panagiotakopoulos)
March 8, 2021, 9:58am
5
It has to do with the topic’s title. When I edited the topic’s title to something shorter, the errors stopped. When I try to restore it to its original length, it showed me a 500 error while updating the title. After the 500 error, I refreshed and the title was updated.
3 Likes
chrispanag
(Christos Panagiotakopoulos)
March 8, 2021, 1:21pm
6
I investigated it a bit further:
This happens on the update of the “linked” post (the one that is quoted) to include a link to the quotation. The link (because of the long title) ends up to be over 500 chars long, which triggers this issue.
The actual link on the linked post, never gets updated if the title is very long.
4 Likes
sam
(Sam Saffron)
March 8, 2021, 10:43pm
7
@Osama can you add to your list to investigate a more forgiving truncation in core, ideally you can repro in a test case.
Certainly not urgent, when you have a chance.
3 Likes
chrispanag
(Christos Panagiotakopoulos)
April 1, 2021, 8:23pm
8
Sorry to ping this, but was this bug tackled? Today, I encountered a second instance of this happening on our forum…
Thanks for all your hard work!
1 Like
sam
(Sam Saffron)
April 6, 2021, 2:52am
9
We are sadly a bit busy, it is on @Osama ’s list, hope we can get to it some time in the next 4 weeks.
4 Likes
andrei
(Andrei Prigorshnev)
June 2, 2021, 11:32am
14
@chrispanag the problem is solved now:
discourse:master
← discourse:fix/string-data-right-truncation-when-linking-posts
opened 11:51AM - 25 May 21 UTC
Users who use encoded slugs on their sites sometimes [run into 500 error](https:… //meta.discourse.org/t/pg-stringdatarighttruncation-error-value-too-long-for-type-character-varying-500/182426) when pasting a link to another topic in a post. The problem happens when generating a backward "reflection" link that would appear in a linked topic:
<img width="400" alt="Screenshot 2021-05-25 at 16 11 53" src="https://user-images.githubusercontent.com/1274517/119496067-29330e80-bd74-11eb-8883-87d71108b4e0.png">
Link URL restricted on the database level to 500 chars in length. At first glance it should work since we have a restriction on topic title length:
<img width="450" alt="Screenshot 2021-05-24 at 17 56 24" src="https://user-images.githubusercontent.com/1274517/119494745-b2494600-bd72-11eb-8bdc-a3e70c62fdf4.png">
But it doesn't work when a site uses encoded slugs, like [here](https://rembetiko.gr/t/%CE%B2%CF%81%CE%AE%CE%BA%CE%B1-%CE%BA%CE%AC%CF%84%CE%B9-%CE%B3%CE%B9%CE%B1-%CE%BC%CE%AD%CE%BD%CE%B1-%CF%84%CE%BF-%CF%81%CE%B5%CE%BC%CF%80%CE%AD%CF%84%CE%B9%CE%BA%CE%BF-%CF%84%CF%81%CE%B1%CE%B3%CE%BF%CF%8D%CE%B4%CE%B9-%CE%B5%CE%AF%CE%BD%CE%B1%CE%B9-%CE%BA%CE%B1%CF%84%CE%AC-%CE%B2%CE%AC%CF%83%CE%B9%CE%BD-%CE%B1%CF%81%CE%BC%CE%BF%CE%BD%CE%B9%CE%BA%CE%BF-%CE%BA%CE%B1%CE%B9-%CE%B4%CE%B9%CE%AC-%CF%84%CE%BF%CF%8D%CF%84%CE%BF-%CF%80%CE%BF%CE%BB%CF%85%CF%86%CF%89%CE%BD%CE%B9%CE%BA%CE%BF/42000) (take a look at the URL). The link to a topic, in this case, can be much longer than 500 characters.
By the way, an error happens only when generating a "reflection" link and doesn't happen with a direct link, we [truncate that link](https://github.com/discourse/discourse/blob/6e2ecf40c7456a1af7f6470d09921f0138fbd4bb/app/models/topic_link.rb#L309). It works because, in this case, the original long link is still present in the post body and can be used for navigation. But we can't do the same for backward "reflection" links (without rewriting their implementation), the whole link must be saved to the database.
The simplest and cleanest solution will be just to remove the restriction on the database level. Abuse is impossible here since we are already protected by the restriction on topic title length. There aren’t performance benefits in using length-constrained columns in Postgres, in fact, length-constrained columns need a few extra CPU cycles to check the length when storing data ([doc](https://www.postgresql.org/docs/9.3/datatype-character.html)).
As you said, the error was happening when generating a backward link from the linked post to the original post if the original post had a long title.
3 Likes
chrispanag
(Christos Panagiotakopoulos)
June 4, 2021, 1:32pm
15
Thank you very much for your fix!
1 Like
sam
(Sam Saffron)
Closed
June 5, 2021, 8:00am
16
This topic was automatically closed after 2 days. New replies are no longer allowed.