O separador de milhares silenciosamente arruina o valor inserido nas configurações

História de terror à frente.

Um gerente de comunidade entrou em contato conosco porque percebeu que o número de usuários em seu fórum não estava crescendo como de costume.

Após alguma pesquisa, descobrimos que muitos usuários que acabaram de se inscrever estavam sendo removidos por serem considerados inativos.

Isso aconteceu porque a configuração clean_up_inactive_users_after_days estava definida como 1 :scream:

Então, cliquei no ícone de histórico e vi que a configuração foi alterada de 730 (dois anos) para 1.095 (três anos) há mais de um ano.

Sim, pessoal, quando você insere uma vírgula (ou um ponto, como é comum em países de língua não inglesa) como separador de grupo de dígitos em uma configuração numérica do site, ele cortará **silenciosamente(!) ** tudo o que estiver após o primeiro separador. Para piorar as coisas, isso só ficará visível após uma atualização forçada da página.

12 curtidas

Será que outras configurações que usam valores numéricos altos também são afetadas dessa forma? :thinking:

6 curtidas

Bem, sim.
Todas as configurações numéricas são afetadas, e há muitos dias, minutos e configurações genéricas de alto valor.

imap_polling_old_emails:1000
decompressed_theme_max_file_size_mb:1000
topic_views_heat_low:1000
secure_uploads_max_email_embed_image_size_kb:1024
maximum_session_age:1440
post_edit_time_limit:1440
composer_media_optimization_image_resize_dimensions_threshold:1920
composer_media_optimization_image_resize_width_target:1920
max_bookmarks_per_user:2000
topic_views_heat_medium:2000
default_other_new_topic_duration_minutes:2880
polling_interval:3000
topic_views_heat_high:3500
max_image_size_kb:4096
max_attachment_size_kb:4096
min_topic_views_for_delete_confirm:5000
max_form_template_content_length:5000
invite_link_max_redemptions_limit:5000
sitemap_page_size:10000
max_notifications_per_user:10000
short_progress_text_threshold:10000
auto_close_topics_post_count:10000
max_drafts_per_user:10000
anonymous_account_duration_minutes:10080
default_email_digest_frequency:10080
tl3_requires_posts_read_cap:20000
anon_polling_interval:25000
max_post_length:32000
tl2_post_edit_time_limit:43200
max_export_file_size_kb:50000
max_bulk_invites:50000
background_polling_interval:60000
decompressed_backup_max_file_size_mb:100000
search_enable_recent_regular_posts_offset_size:200000
default_other_auto_track_topics_after_msecs:300000
max_draft_length:400000
composer_media_optimization_image_bytes_optimization_threshold:524288

suggested_topics_unread_max_days_old:
suggested_topics_max_days_old:
pending_users_reminder_delay_minutes:
invite_expiry_days:
purge_unactivated_users_grace_period_days:
anonymous_account_duration_minutes:
ignored_users_message_gap_days:
clean_up_inactive_users_after_days:
clean_up_unused_staged_users_after_days:
show_time_gap_days:
old_post_notice_days:
returning_users_days:
suppress_digest_email_after_days:
disallow_reply_by_email_after_days:
delete_email_logs_after_days:
reset_bounce_score_after_days:
delete_rejected_email_after_days:
purge_deleted_uploads_grace_period_days:
tl2_requires_days_visited:
tl3_requires_days_visited:
invalidate_inactive_admin_email_after_days:
send_old_credential_reminder_days:
search_query_log_max_retention_days:
cold_age_days_low:
cold_age_days_medium:
cold_age_days_high:
delete_drafts_older_than_n_days:
delete_merged_stub_topics_after_days:
default_other_new_topic_duration_minutes:
retain_web_hook_events_period_days:
revoke_api_keys_unused_days:
revoke_api_keys_maxlife_days:
revoke_user_api_keys_unused_days:
revoke_user_api_keys_maxlife_days:

7 curtidas

Obrigado pelo relatório, @RGJ! :pray:

Este é realmente um problema assustador. Corrigimos isso aqui: 1) permitindo apenas entradas numéricas na interface do usuário e 2) removendo quaisquer caracteres não numéricos no back-end para segurança extra.

11 curtidas

Reabrindo isto, parece que as coisas regrediram e até pioraram.

  • Vá para Admin → Configurações → Configuração Básica → tópicos sugeridos

Firefox no desktop

  • Digite 5.0 e salve (sem erro) e atualize → Descubra que foi definido como 50
  • Digite 5,0 e salve (sem erro) e atualize → Descubra que foi definido como 0

Safari no iOS

  • Digite 5.0 e salve (sem erro) e atualize → Descubra que foi definido como 50
  • Digite 5,0 e salve (sem erro) e atualize → Descubra que foi definido como 50
4 curtidas

Obrigado Richard por relatar, eu consigo reproduzir isso.

2 curtidas

Obrigado pelo relatório, Richard! Eu também consigo replicar o que você está descrevendo. Tudo está "conforme o esperado" a partir de hoje, exceto pelo 5,0 resultando em 0 no Firefox, que é um bug. Esse é estranho.

Parece que precisamos revisar isso novamente, pelo menos para atualizar o que o administrador vê, para que seja preciso e não inclua os separadores. Atualmente, você precisa atualizar seu navegador da web após salvar as alterações para vê-lo.

Mas acho que também podemos fazer mais aqui para ajudar o administrador a evitar cometer esses erros e evitar confusão com eles. Parece errado para mim que você possa inserir "364,5 dias" para dias máximos de tópicos sugeridos e que isso se transforme em 3645 dias. Talvez simplesmente não permitamos a entrada de não números nesses tipos de campos.

6 curtidas

Corrigido em FIX: Do not allow , or . in site setting integer input by martin-brennan · Pull Request #27618 · discourse/discourse · GitHub. Não é mais possível inserir nada além de números nesses campos. Chega de separadores , ou ..

Anteriormente, limpávamos a entrada para configurações de site inteiras
apenas no lado do servidor, o que era um pouco confuso quando
os usuários inseriam, por exemplo, 100,5 e acabavam com 1005, e
não viam isso refletido na interface do usuário.

Agora que estamos usando entradas numéricas nativas para essas configurações,
podemos melhorar um pouco a experiência ao não permitir . ou ,
na entrada, pois deve ser apenas números inteiros, e
adicionar um tamanho de passo de 1. Todos os outros caracteres já são impedidos
nesta entrada numérica nativa.

6 curtidas

Este tópico foi fechado automaticamente após 3 dias. Novas respostas não são mais permitidas.