From 0e476bf28f328b5217ef66f1d2b4e1eecf694b6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Allan=20Nordh=C3=B8y?= Date: Fri, 3 Apr 2020 19:54:30 +0000 Subject: [PATCH 01/24] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegian?= =?UTF-8?q?=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 76.9% (635 of 825 strings) --- xwords4/android/res_src/values-nb-rNO/strings.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/xwords4/android/res_src/values-nb-rNO/strings.xml b/xwords4/android/res_src/values-nb-rNO/strings.xml index 2ff889b10..776a8617f 100644 --- a/xwords4/android/res_src/values-nb-rNO/strings.xml +++ b/xwords4/android/res_src/values-nb-rNO/strings.xml @@ -112,8 +112,8 @@ Poengsum for tur: %1$d \n - %1$d flis igjen å trekke fra. - + Ei flis igjen å trekke fra. + %1$d flis igjen å trekke fra. Gjenopprett farger Er du sikker på at du ønsker å tilbakestille alle innstillingene til forvalg? @@ -388,8 +388,8 @@ Siste advarsel: %1$s Din motstander - %1$s spilte %2$s for 1 poeng - + %1$s spilte %2$s for ett poeng + %1$s spilte %2$s for ett poeng %1$s mistet en tur Forvalgt språk @@ -991,4 +991,4 @@ Kun prøv: Ingen FCM-meldinger Kun FCM: Ingen prøving Forvalg: Miks prøving og FCM - + \ No newline at end of file From c9b4d76c74f8f5b509ff76ec62fec1eddd8c0fa9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Allan=20Nordh=C3=B8y?= Date: Sat, 4 Apr 2020 22:41:55 +0000 Subject: [PATCH 02/24] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegian?= =?UTF-8?q?=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 77.0% (636 of 825 strings) --- xwords4/android/res_src/values-nb-rNO/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xwords4/android/res_src/values-nb-rNO/strings.xml b/xwords4/android/res_src/values-nb-rNO/strings.xml index 776a8617f..736cb3b11 100644 --- a/xwords4/android/res_src/values-nb-rNO/strings.xml +++ b/xwords4/android/res_src/values-nb-rNO/strings.xml @@ -389,7 +389,7 @@ Din motstander %1$s spilte %2$s for ett poeng - %1$s spilte %2$s for ett poeng + %1$s spilte %2$s for %3$d poeng %1$s mistet en tur Forvalgt språk From c1597cc941074ccb650a425c57628e282cc73f5a Mon Sep 17 00:00:00 2001 From: Eric House Date: Wed, 25 Mar 2020 22:27:01 -0700 Subject: [PATCH 03/24] recover from corrupt chat player index This should never happen, but it did and I want to stop local crashes to investigate. --- .../src/main/java/org/eehouse/android/xw4/ChatDelegate.java | 5 +++-- xwords4/common/server.c | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/ChatDelegate.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/ChatDelegate.java index 4d62cef2a..4597b4b32 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/ChatDelegate.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/ChatDelegate.java @@ -162,8 +162,9 @@ public class ChatDelegate extends DelegateBase { TextView view = (TextView)row.findViewById( R.id.chat_row_text ); view.setText( msg ); view = (TextView)row.findViewById( R.id.chat_row_name ); - view.setText( getString( R.string.chat_sender_fmt, - m_names[playerIndx] ) ); + + String name = playerIndx < m_names.length ? m_names[playerIndx] : ""; + view.setText( getString( R.string.chat_sender_fmt, name ) ); if ( tsSeconds > 0 ) { long now = 1000L * Utils.getCurSeconds(); diff --git a/xwords4/common/server.c b/xwords4/common/server.c index 771d92987..6a7a58180 100644 --- a/xwords4/common/server.c +++ b/xwords4/common/server.c @@ -722,6 +722,7 @@ sendChatTo( ServerCtxt* server, XP_U16 devIndex, const XP_UCHAR* msg, XWStreamCtxt* stream = messageStreamWithHeader( server, devIndex, XWPROTO_CHAT ); stringToStream( stream, msg ); + XP_ASSERT( from < server->vol.gi->nPlayers ); stream_putU8( stream, from ); stream_putU32( stream, timestamp ); stream_destroy( stream ); @@ -765,6 +766,7 @@ receiveChat( ServerCtxt* server, XWStreamCtxt* incoming ) sendChatToClientsExcept( server, sourceClientIndex, msg, from, timestamp ); } + XP_ASSERT( from < server->vol.gi->nPlayers ); util_showChat( server->vol.util, msg, from, timestamp ); XP_FREE( server->mpool, msg ); return XP_TRUE; From ac6373afa7d8c8377c4fa0c7c5a171bd302996f4 Mon Sep 17 00:00:00 2001 From: Eric House Date: Thu, 26 Mar 2020 18:12:37 -0700 Subject: [PATCH 04/24] fix crash when chat message is too long Len byte was limited to 255, but would get clipped (masked with 0xFF) then all the string data would get written. So on receipt, the clipped length was taken to be that of the string data, with the rest of the string to be interpreted as something else. An array index, in this case. --- .../src/main/java/org/eehouse/android/xw4/DBUtils.java | 2 +- xwords4/common/server.c | 2 -- xwords4/common/strutils.c | 8 ++++++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DBUtils.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DBUtils.java index 25f53e470..4d6c1cb56 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DBUtils.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DBUtils.java @@ -1868,7 +1868,7 @@ public class DBUtils { { Assert.assertNotNull( msg ); Assert.assertFalse( -1 == fromPlayer ); - ArrayList valuess = new ArrayList(); + ArrayList valuess = new ArrayList<>(); valuess.add( cvForChat( rowid, msg, fromPlayer, tsSeconds ) ); appendChatHistory( context, valuess ); Log.i( TAG, "appendChatHistory: inserted \"%s\" from player %d", diff --git a/xwords4/common/server.c b/xwords4/common/server.c index 6a7a58180..771d92987 100644 --- a/xwords4/common/server.c +++ b/xwords4/common/server.c @@ -722,7 +722,6 @@ sendChatTo( ServerCtxt* server, XP_U16 devIndex, const XP_UCHAR* msg, XWStreamCtxt* stream = messageStreamWithHeader( server, devIndex, XWPROTO_CHAT ); stringToStream( stream, msg ); - XP_ASSERT( from < server->vol.gi->nPlayers ); stream_putU8( stream, from ); stream_putU32( stream, timestamp ); stream_destroy( stream ); @@ -766,7 +765,6 @@ receiveChat( ServerCtxt* server, XWStreamCtxt* incoming ) sendChatToClientsExcept( server, sourceClientIndex, msg, from, timestamp ); } - XP_ASSERT( from < server->vol.gi->nPlayers ); util_showChat( server->vol.util, msg, from, timestamp ); XP_FREE( server->mpool, msg ); return XP_TRUE; diff --git a/xwords4/common/strutils.c b/xwords4/common/strutils.c index ba7b5c986..82054d8fc 100644 --- a/xwords4/common/strutils.c +++ b/xwords4/common/strutils.c @@ -267,8 +267,12 @@ stringFromStreamHere( XWStreamCtxt* stream, XP_UCHAR* buf, XP_U16 buflen ) void stringToStream( XWStreamCtxt* stream, const XP_UCHAR* str ) { - XP_U16 len = str==NULL? 0: XP_STRLEN( str ); - XP_ASSERT( len < 0xFF ); + XP_U16 len = str == NULL? 0: XP_STRLEN( str ); + if ( len > 0xFF ) { + XP_LOGFF( "truncating string '%s', dropping len from %d to %d", + str, len, 0xFF ); + len = 0xFF; + } stream_putU8( stream, (XP_U8)len ); stream_putBytes( stream, str, len ); } /* putStringToStream */ From 6602e3daae92cdb50aed3b4a4e59eda4ddcfa4c0 Mon Sep 17 00:00:00 2001 From: Eric House Date: Thu, 26 Mar 2020 18:24:46 -0700 Subject: [PATCH 05/24] hack: limit chat field length to 255 The common code truncates to 255 *bytes*, not chars, so this isn't even right, but at least for ascii users it'll make it less likely that what's typed doesn't all get sent. The right fix is to change the format to not limit sent str len to 255 bytes. See commit 512a8e1af. --- xwords4/android/app/src/main/res/layout/chat.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/xwords4/android/app/src/main/res/layout/chat.xml b/xwords4/android/app/src/main/res/layout/chat.xml index b0ac5d6eb..0a9b0a5d1 100644 --- a/xwords4/android/app/src/main/res/layout/chat.xml +++ b/xwords4/android/app/src/main/res/layout/chat.xml @@ -34,6 +34,7 @@ android:layout_weight="1" android:scrollHorizontally="false" android:hint="@string/chat_hint" + android:maxLength="255" />