Graham Eveleigh created OLINGO-1610:
---------------------------------------

             Summary: Use of odata-accept-forms-encoding param is not thread 
safe
                 Key: OLINGO-1610
                 URL: https://issues.apache.org/jira/browse/OLINGO-1610
             Project: Olingo
          Issue Type: Bug
          Components: odata4-server
    Affects Versions: (Java) V4 4.10.0
            Reporter: Graham Eveleigh


OLINGO-752 introduced a URL parameter {{odata-accept-forms-encoding}} to allow 
clients to select if a {{+}} character in URL the query strings should be 
treated as a space or a literal plus.

The implementation uses a static variable to store whether the current request 
is using forms encoding or not.  When multiple requests happen concurrently, 
some using forms encoding and some not, it will be non-deterministic how each 
request will be treated.

The fix is here: 
https://github.com/apache/olingo-odata4/commit/38f77daa5c555af2012449e1f090a0395bd7a883#diff-89efeb911e74ea7196a37764707a489da87115ac5c0e535746370a6869f5cd94

See how {{Parser.parseUri}} makes to calls to static methods on {{UriDecoder}}, 
namely {{splitAndDecodeOptions}} first and later {{isFormEncoding}}.  The call 
to {{splitAndDecodeOptions}} checks if the request is using forms encoding and 
saves the result in the static field {{UriDecoder.formEncoding}}.  The second 
call to {{isFormEncoding}} returns the value of {{UriDecoder.formEncoding}}.  
If a second call to {{splitAndDecodeOptions}} is made before {{isFormEncoding}} 
is called, the wrong result may be returned.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to