From 795971bc806776ad48de6f0135736cbaaefa5fcd Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Sun, 21 Aug 2011 01:45:41 +0200 Subject: RPC: Coerce numeric values into integers Coerce following fields into integers to ensure json_encode() serializes them as integers: * ID * CategoryID * NumVotes * OutOfDate * FirstSubmitted * LastModified This means that there will be a minor API break. There's no better way to do this properly, though. Fixes FS#25693. Signed-off-by: Lukas Fleischer --- web/lib/aurjson.class.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/web/lib/aurjson.class.php b/web/lib/aurjson.class.php index b4648c95..3a8e830f 100644 --- a/web/lib/aurjson.class.php +++ b/web/lib/aurjson.class.php @@ -22,6 +22,10 @@ class AurJSON { 'License', 'NumVotes', 'OutOfDateTS AS OutOfDate', 'SubmittedTS AS FirstSubmitted', 'ModifiedTS AS LastModified' ); + private static $numeric_fields = array( + 'ID', 'CategoryID', 'NumVotes', 'OutOfDate', 'FirstSubmitted', + 'LastModified' + ); /** * Handles post data, and routes the request. @@ -126,6 +130,14 @@ class AurJSON { $name = $row['Name']; $row['URLPath'] = URL_DIR . substr($name, 0, 2) . "/" . $name . "/" . $name . ".tar.gz"; + /* Unfortunately, mysql_fetch_assoc() returns all fields as + * strings. We need to coerce numeric values into integers to + * provide proper data types in the JSON response. + */ + foreach (self::$numeric_fields as $field) { + $row[$field] = intval($row[$field]); + } + if ($type == 'info') { $search_data = $row; break; -- cgit v1.2.3-24-g4f1b