aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarvin W <git@larma.de>2025-04-07 14:09:57 +0200
committerMarvin W <git@larma.de>2025-04-07 14:11:05 +0200
commit7dc815ac4d196f01ce76fc5e61ef13b02dace15e (patch)
treeb3686ce21c11288d350782c6fbb80924c4ce194e
parentdb1830c54ecc70f7933febab02c2ad7ee44d0bd1 (diff)
Fix unexpected behavior of get_attribute_uint on systems with 32-bit long
-rw-r--r--xmpp-vala/src/core/stanza_node.vala6
-rw-r--r--xmpp-vala/tests/common.vala4
-rw-r--r--xmpp-vala/tests/stanza.vala20
3 files changed, 19 insertions, 11 deletions
diff --git a/xmpp-vala/src/core/stanza_node.vala b/xmpp-vala/src/core/stanza_node.vala
index 54c14956..6911b4b2 100644
--- a/xmpp-vala/src/core/stanza_node.vala
+++ b/xmpp-vala/src/core/stanza_node.vala
@@ -102,7 +102,7 @@ public class StanzaNode : StanzaEntry {
if (attribute_str == null) return def;
int res = def;
- bool parse_success = int.try_parse(attribute_str, out res);
+ bool parse_success = int.try_parse(attribute_str, out res, null, 10);
if (!parse_success) {
info("Could not parse int attribute %s: %s", name, attribute_str);
return def;
@@ -112,10 +112,10 @@ public class StanzaNode : StanzaEntry {
public uint get_attribute_uint(string name, uint def = 0, string? ns_uri = null) {
string? attribute_str = get_attribute(name, ns_uri);
- if (attribute_str == null) return def;
+ if (attribute_str == null || attribute_str.strip().has_prefix("-")) return def;
uint res = def;
- bool parse_success = uint.try_parse(attribute_str, out res);
+ bool parse_success = uint.try_parse(attribute_str, out res, null, 10);
if (!parse_success) {
info("Could not parse uint attribute %s: %s", name, attribute_str);
return def;
diff --git a/xmpp-vala/tests/common.vala b/xmpp-vala/tests/common.vala
index dc1c8e50..5bd7bbb6 100644
--- a/xmpp-vala/tests/common.vala
+++ b/xmpp-vala/tests/common.vala
@@ -69,6 +69,10 @@ bool fail_if_not_eq_int(int left, int right, string? reason = null) {
return fail_if_not(left == right, @"$(reason + ": " ?? "")$left != $right");
}
+bool fail_if_not_eq_uint(uint left, uint right, string? reason = null) {
+ return fail_if_not(left == right, @"$(reason + ": " ?? "")$left != $right");
+}
+
private float float_to_accuracy(float f, float accuracy) {
return (float) (Math.round(f * Math.pow(10, accuracy)) / Math.pow(10, accuracy));
}
diff --git a/xmpp-vala/tests/stanza.vala b/xmpp-vala/tests/stanza.vala
index fa1ccb41..7326a668 100644
--- a/xmpp-vala/tests/stanza.vala
+++ b/xmpp-vala/tests/stanza.vala
@@ -115,20 +115,24 @@ class StanzaTest : Gee.TestCase {
private void test_get_attribute_int() {
var stanza_node = new StanzaNode.build("test", "ns").add_self_xmlns().put_attribute("bar", "42");
- assert(stanza_node.get_attribute_int("bar", -2) == 42);
- assert(stanza_node.get_attribute_uint("bar", 3) == 42);
+ fail_if_not_eq_int(stanza_node.get_attribute_int("bar", -2), 42);
+ fail_if_not_eq_uint(stanza_node.get_attribute_uint("bar", 3), 42);
stanza_node = new StanzaNode.build("test", "ns").add_self_xmlns().put_attribute("bar", "-42");
- assert(stanza_node.get_attribute_int("bar", -2) == -42);
- assert(stanza_node.get_attribute_uint("bar", 3) == 3);
+ fail_if_not_eq_int(stanza_node.get_attribute_int("bar", -2), -42);
+ fail_if_not_eq_uint(stanza_node.get_attribute_uint("bar", 3), 3);
stanza_node = new StanzaNode.build("test", "ns").add_self_xmlns();
- assert(stanza_node.get_attribute_int("bar", -2) == -2);
- assert(stanza_node.get_attribute_uint("bar", 3) == 3);
+ fail_if_not_eq_int(stanza_node.get_attribute_int("bar", -2), -2);
+ fail_if_not_eq_uint(stanza_node.get_attribute_uint("bar", 3), 3);
+
+ stanza_node = new StanzaNode.build("test", "ns").add_self_xmlns().put_attribute("bar", "0x42");
+ fail_if_not_eq_int(stanza_node.get_attribute_int("bar", -2), -2);
+ fail_if_not_eq_uint(stanza_node.get_attribute_uint("bar", 3), 3);
stanza_node = new StanzaNode.build("test", "ns").add_self_xmlns().put_attribute("bar", "str");
- assert(stanza_node.get_attribute_int("bar", -2) == -2);
- assert(stanza_node.get_attribute_uint("bar", 3) == 3);
+ fail_if_not_eq_int(stanza_node.get_attribute_int("bar", -2), -2);
+ fail_if_not_eq_uint(stanza_node.get_attribute_uint("bar", 3), 3);
}