Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Paste
P7491
D1105 in patch format
Active
Public
Actions
Authored by
Lucas_Werkmeister_WMDE
on Aug 29 2018, 10:44 AM.
Edit Paste
Archive Paste
View Raw File
Subscribe
Mute Notifications
Award Token
Flag For Later
Tags
Wikidata
Referenced Files
F25491758: D1105 in patch format
Aug 29 2018, 10:44 AM
2018-08-29 10:44:29 (UTC+0)
Subscribers
None
From 6f6b3533ad4c8ec6d1b74186d2d840a8502bfb2c Mon Sep 17 00:00:00 2001
From: Lucas Werkmeister <mail@lucaswerkmeister.de>
Date: Wed, 29 Aug 2018 12:32:33 +0200
Subject: [PATCH] Fix Unicode string comparison
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Canonical Decomposition is not the form of strings used by Wikibase
(Wikibase uses Canonical Composition), and it is not usually the form in
which user input is received (some browsers [1] explicitly normalize
inputs to Canonical Composition, and other input is also usually in a
normalized form), so if we only Decompose one half of the values when
comparing them, we will usually end up reporting a mismatch. This
manifests itself as an error (“base statement not found”) when
attempting to add a statement with qualifiers whose value contains
umlauts: when attempting to add the qualifiers, QuickStatements will be
unable to locate the statement it just added.
The fix for this is simple: normalize both sides when comparing strings.
In that case, it also doesn’t matter which normalization form we use.
[1]: https://stackoverflow.com/a/11190012
---
public_html/quickstatements.php | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/public_html/quickstatements.php b/public_html/quickstatements.php
index 5e40e6e..2471cea 100644
--- a/public_html/quickstatements.php
+++ b/public_html/quickstatements.php
@@ -483,7 +483,9 @@ protected function getStatementID ( $command ) {
protected function compareDatavalue ( $d1 , $d2 ) {
if ( $d1->type != $d2->type ) return false ;
if ( $d1->type == 'string' ) {
- return normalizer_normalize($d1->value,Normalizer::FORM_D) == $d2->value; # Yay Unicode!
+ $value1 = normalizer_normalize($d1->value,Normalizer::FORM_D);
+ $value2 = normalizer_normalize($d2->value,Normalizer::FORM_D);
+ return $value1 == $value2;
}
if ( $d1->type == 'quantity' ) return $d1->value->amount*1 == $d2->value->amount*1 ;
if ( $d1->type == 'time' ) {
--
2.17.1
Event Timeline
Lucas_Werkmeister_WMDE
created this paste.
Aug 29 2018, 10:44 AM
2018-08-29 10:44:29 (UTC+0)
Log In to Comment