diff --git a/docroot/sites/all/modules/contrib/twitter/twitter.inc b/docroot/sites/all/modules/contrib/twitter/twitter.inc index be2993c..e3ac379 100644 --- a/docroot/sites/all/modules/contrib/twitter/twitter.inc +++ b/docroot/sites/all/modules/contrib/twitter/twitter.inc @@ -146,11 +146,22 @@ function twitter_status_load($status_id) { * Saves a TwitterStatus object to {twitter} */ function twitter_status_save($status) { + //see https://www.drupal.org/node/1910376 + //reject overly long 2 byte sequences, as well as characters above U+10000 and replace with -- + $stripped_string = preg_replace('/[\x00-\x08\x10\x0B\x0C\x0E-\x19\x7F]'. + '|[\x00-\x7F][\x80-\xBF]+'. + '|([\xC0\xC1]|[\xF0-\xFF])[\x80-\xBF]*'. + '|[\xC2-\xDF]((?![\x80-\xBF])|[\x80-\xBF]{2,})'. + '|[\xE0-\xEF](([\x80-\xBF](?![\x80-\xBF]))|(?![\x80-\xBF]{2})|[\x80-\xBF]{3,})/S', + '--', $status->text ); + //reject overly long 3 byte sequences and UTF-16 surrogates and replace with -- + $stripped_string = preg_replace('/\xE0[\x80-\x9F][\x80-\xBF]'.'|\xED[\xA0-\xBF][\x80-\xBF]/S','--', $stripped_string ); + $row = array( 'twitter_id' => $status->id, 'screen_name' => $status->user->screen_name, 'created_time' => strtotime($status->created_at), - 'text' => $status->text, + 'text' => $stripped_string, 'source' => $status->source, 'in_reply_to_status_id' => ($status->in_reply_to_status_id > 0) ? (string) $status->in_reply_to_status_id : NULL, 'in_reply_to_user_id' => (int) $status->in_reply_to_user_id,