Le séparateur de milliers ruine silencieusement la valeur saisie dans les paramètres

Histoire d’horreur à venir.

Un responsable de communauté nous a contactés car il avait constaté que le nombre d’utilisateurs sur son forum n’augmentait plus comme d’habitude.

Après quelques recherches, nous avons découvert que de nombreux utilisateurs qui venaient de s’inscrire étaient supprimés car jugés inactifs.

Il s’est avéré que le paramètre clean_up_inactive_users_after_days était réglé sur 1 :scream:

J’ai donc cliqué sur l’icône d’historique et j’ai vu que le paramètre avait été modifié de 730 (deux ans) à 1 095 (trois ans) il y a plus d’un an.

Oui, lorsque vous entrez une virgule (ou un point, comme c’est courant dans les pays non anglophones) comme séparateur de groupe de chiffres dans un paramètre de site numérique, cela coupera silencieusement (!) tout ce qui suit le premier séparateur. Pour aggraver les choses, cela ne deviendra visible qu’après un actualisation forcée de la page.

12 « J'aime »

Je me demande si d’autres paramètres qui utilisent des valeurs numériques élevées sont également affectés de cette manière ? :thinking:

6 « J'aime »

Eh bien, oui. Tous les paramètres numériques sont affectés, et il y a beaucoup de jours, de minutes et de paramètres génériques à haute valeur.

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 « J'aime »

Merci pour le rapport, @RGJ ! :pray:

C’est une situation effrayante, en effet. Nous avons résolu ce problème ici en 1) n’autorisant que les entrées numériques dans l’interface utilisateur, et 2) en supprimant tous les caractères non numériques côté serveur pour plus de sécurité.

11 « J'aime »

Je rouvre ceci, il semble que les choses aient régressé et se soient même aggravées.

  • Aller dans Admin → Paramètres → Configuration de base → sujets suggérés

Firefox sur ordinateur

  • Entrez 5.0 puis enregistrez (aucune erreur) et actualisez → Trouvez qu’il a été défini sur 50
  • Entrez 5,0 puis enregistrez (aucune erreur) et actualisez → Trouvez qu’il a été défini sur 0

Safari sur iOS

  • Entrez 5.0 puis enregistrez (aucune erreur) et actualisez → Trouvez qu’il a été défini sur 50
  • Entrez 5,0 puis enregistrez (aucune erreur) et actualisez → Trouvez qu’il a été défini sur 50
4 « J'aime »

Merci Richard de l’avoir signalé, je peux certainement le reproduire.

2 « J'aime »

Merci pour le rapport, Richard ! Je suis également en mesure de reproduire ce que vous décrivez. Tout est « par conception » à ce jour, à l’exception du fait que 5,0 donne 0 dans Firefox, ce qui est un bug. C’est étrange.

Il semble que nous devions revoir cela, au moins pour mettre à jour ce que l’administrateur voit afin qu’il soit exact et n’inclue pas les séparateurs. Actuellement, vous devez actualiser votre navigateur Web après avoir enregistré les modifications pour le voir.

Mais je pense que nous pouvons également faire plus ici pour aider l’administrateur à éviter de faire ces erreurs et à ne pas être confus par elles. Il me semble faux que vous puissiez saisir « 364,5 jours » pour suggested topics max days old et que cela devienne 3645 jours. Peut-être que nous n’autorisons tout simplement pas la saisie de non-chiffres dans ce type de champs.

6 « J'aime »

Corrigé dans FIX: Do not allow , or . in site setting integer input by martin-brennan · Pull Request #27618 · discourse/discourse · GitHub. Il n’est plus possible de mettre autre chose que des chiffres dans ces champs. Fini les séparateurs , ou ..

Nous nettoyions auparavant les entrées pour les paramètres de site entiers
côté serveur uniquement, ce qui était un peu déroutant lorsque
les utilisateurs saisissaient par exemple 100,5 et obtenaient 1005, et
ne voyaient pas cela reflété dans l’interface utilisateur.

Maintenant que nous utilisons des entrées numériques natives pour ces paramètres,
nous pouvons améliorer un peu l’expérience en n’autorisant pas . ou ,
dans l’entrée, car il ne devrait s’agir que de nombres entiers, et
ajouter un pas de 1. Tous les autres caractères sont déjà empêchés
dans cette entrée numérique native.

6 « J'aime »

Ce sujet a été automatiquement fermé après 3 jours. Les nouvelles réponses ne sont plus autorisées.