[aur-dev] [PATCH 2/2] RPC: Coerce numeric values into integers

Lukas Fleischer archlinux at cryptocrack.de
Fri Sep 23 09:36:24 EDT 2011


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 <archlinux at cryptocrack.de>
---
 web/lib/aurjson.class.php |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/web/lib/aurjson.class.php b/web/lib/aurjson.class.php
index b4648c9..3a8e830 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;
-- 
1.7.6.3



More information about the aur-dev mailing list