Mholloway has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/403575 )

Change subject: Guard against unexpected ImageDescription extmetadata values
......................................................................

Guard against unexpected ImageDescription extmetadata values

ImageDescription, like all extmetadata fields, can contain anything.
It's a mistake to assume that it will take the form of a key-value
object.

This guards against unexpected input.

Bug: T184669
Change-Id: I502a2b03109686d6a23c124b814eff92b75bb8c1
---
M lib/feed/featured-image.js
M test/features/featured-image/pagecontent.js
2 files changed, 26 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/mobileapps 
refs/changes/75/403575/1

diff --git a/lib/feed/featured-image.js b/lib/feed/featured-image.js
index fd04030..79ee550 100644
--- a/lib/feed/featured-image.js
+++ b/lib/feed/featured-image.js
@@ -87,6 +87,18 @@
     return Object.keys(descriptions)[0];
 }
 
+/**
+ * Resolved description language from the extmetadata ImageDescription field, 
if
+ * available. Requires that the input be an object of the form 
{"en":"foo","de":"bar"}.
+ * If not, will return undefined or false.
+ * @param {?Object} input extmetadata ImageDescription value (may be undefined)
+ * @param {!String} lang the request language
+ * @return {?String|Boolean} the description language to use
+ */
+function resolvedLangFromImageDescription(input, lang) {
+    return input && (typeof (input) === 'object' || undefined) && 
pickDescriptionLang(input, lang);
+}
+
 function buildPayload(page, lang) {
     if (!page || page.notfound) {
         return undefined;
@@ -118,7 +130,7 @@
     }
 
     const descriptions = imageinfo.extmetadata.ImageDescription.value;
-    const resolvedLang = descriptions && pickDescriptionLang(descriptions, 
lang);
+    const resolvedLang = resolvedLangFromImageDescription(descriptions, lang);
     if (resolvedLang) {
         payload.description = new Description(resolvedLang, 
descriptions[resolvedLang]);
     }
@@ -210,5 +222,8 @@
 }
 
 module.exports = {
-    promise
+    promise,
+    testing: {
+        resolvedLangFromImageDescription
+    }
 };
diff --git a/test/features/featured-image/pagecontent.js 
b/test/features/featured-image/pagecontent.js
index 4b7cfdd..a77e832 100644
--- a/test/features/featured-image/pagecontent.js
+++ b/test/features/featured-image/pagecontent.js
@@ -83,6 +83,15 @@
             });
     });
 
+    it('should return english description where ImageDescription value is 
unexpected type', () => {
+        const uri = 
`${server.config.uri}zh.wikipedia.org/v1/media/image/featured/2018/01/10`;
+        return preq.get({uri})
+            .then((res) => {
+                assert.contains(res.body.description.text, 'Motosacoche');
+                assert.deepEqual(res.body.description.lang, 'en');
+            });
+    });
+
     it('featured image of an old date should return 404', () => {
         const uri = 
`${server.config.uri}en.wikipedia.org/v1/media/image/featured/1970/12/31`;
         return preq.get({ uri })

-- 
To view, visit https://gerrit.wikimedia.org/r/403575
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I502a2b03109686d6a23c124b814eff92b75bb8c1
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/mobileapps
Gerrit-Branch: master
Gerrit-Owner: Mholloway <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to