2015-03-06 1 views
15

हम एक पागल बग का अनुभव कर रहे हैं जहां प्रतीत होता है कि यादृच्छिक बाइट्स ईमेल पते पर कुछ 90% समय पर ईमेल क्षेत्र पर खड़े हो रहे हैं, जब ईमेल सहेजा जा रहा है। यहाँ क्या हो सकता है की एक उदाहरण है:अजीब बाइट्स रेल में सहेजने के बाद विशेषता में जोड़ा गया

 
From params: '[email protected]' 
Before validate: '[email protected]' 
After validate: '[email protected]' 
Before save: '[email protected]' 
Value in object after save: '[email protected]' 
Retrieve record just created by id, and fetch id: '[email protected]\u007f' 

कहाँ बिल्ली था कि \u007f (UTF-8 delete character!!!) से आते हैं ?! यह अब तक का सबसे आम कचरा है जो दिखाता है। यहाँ एक सूची कुछ अन्य वैध बाइट दृश्यों कि समय-समय पर दिखाई दिया है:

 
r\u007f 
U\u007f 
a\u007f 
#m$\u007f 

कभी कभी मैं पूरी तरह से कचरा बिट्स मिलता है, मैं नहीं बता सकता कि क्या कोई PG::CharacterNotInRepertoire त्रुटि के कारण इन की तुलना में अधिक बाइट्स हैं:

0xde 0x4d 
0xf6 0x7f 
0xbc 
0xe3 0x6c 0x24 

PG::CharacterNotInRepertoire त्रुटियों को देखते हुए, मुझे लगता है कि यह मूल्य बचाया जा रहा है, लेकिन मेरे आवेदन कोड के दायरे से बाहर कहीं और हो रहा है।

ध्यान दें कि यह उपयोगकर्ता के लिए किसी भी अन्य फ़ील्ड के लिए अजीब तरह से नहीं हो रहा है।

यहाँ सब कॉलबैक वर्तमान ईमेल पता स्पर्श करें कि इस प्रकार हैं:

  • #strip! और #downcase! सत्यापन से पहले
  • regex \A[A-Za-z0-9._%+-][email protected](?:[A-Za-z0-9-]+\.)+[A-Za-z]{2,20}\z

साथ

  • स्वरूप मान्यता कुछ ऐप्स की जानकारी:

    • रूबी v2.2.0
    • रेल v4.1.8
    • Postgres v9.3.2
    • पीजी v0.17.1
  • उत्तर

    25

    बाहर कर देता है कि pg-ruby < v0.18.0 रूबी v2.2 के साथ असंगत है वहाँ होने के लिए कोई स्पष्ट चेतावनियों के बावजूद इसके विपरीत ...

    https://bitbucket.org/ged/ruby-pg/issue/210/crazy-bytes-being-added-to-record

    नवीनीकरण अब या प्राप्त बिट (रों)।

    2

    यह भी ध्यान रखें कि यदि आप रेल 4.2.0 का उपयोग कर रहे हैं, तो पीजी 0.18 के साथ कोई समस्या है। * जो बाइनरी डेटा लिखने को प्रभावित करता है। मेरे पास वर्तमान में 4.2.0 बंदरगाह है जो पैच के साथ है जो 4.2.1 में होगा। विवरण के लिए https://github.com/rails/rails/pull/17680 देखें यदि आप रूबी 2.2 के साथ 4.2.0 चला रहे हैं (और इस प्रकार पीजी 0.18। के साथ)। रेल 4.0 पर भी इसी तरह के मुद्दे हो सकते हैं। और 4.1। * - मुझे पता नहीं लगा है कि किस संस्करण में पैच है, और क्या वे संस्करण अभी तक जारी किए गए हैं।

    4.2.0 के लिए मेरे बंदर-पैच की तरह दिखता है:

    # Should release in Rails 4.2.1 
    # PostgreSQL, Fix change detection caused by superfluous bytea unescaping 
    # See https://github.com/rails/rails/pull/17680 
    if Rails.version == '4.2.0' 
        module ActiveRecord 
        module ConnectionAdapters 
         module PostgreSQL 
         module OID # :nodoc: 
          class Bytea < Type::Binary # :nodoc: 
          def type_cast_from_database(value) 
           return if value.nil? 
           return value.to_s if value.is_a?(Type::Binary::Data) 
           PGconn.unescape_bytea(super) 
          end 
          end 
         end 
         end 
        end 
        end 
    end 
    
    संबंधित मुद्दे