@@ -48,32 +48,42 @@ protected AmqpString()
4848 _stringBytes = ReadOnlyMemory < byte > . Empty ;
4949 }
5050
51- public AmqpString ( string value , ushort maxLen , Encoding encoding )
52- : this ( value , maxLen , encoding , null )
51+ public AmqpString ( string value , ushort maxLen , Encoding encoding ,
52+ bool strictValidation = false )
53+ : this ( value , maxLen , encoding , null , strictValidation )
5354 {
5455 }
5556
56- public AmqpString ( string value , ushort maxLen , Encoding encoding , string validatorRegex )
57+ public AmqpString ( string value , ushort maxLen , Encoding encoding , string validatorRegex ,
58+ bool strictValidation = false )
5759 {
58- if ( value . Length > maxLen )
60+ /*
61+ * Note:
62+ * RabbitMQ does hardly any validation for names, only stripping off CR/LF
63+ * characters if present. There are no other checks.
64+ */
65+ if ( strictValidation )
5966 {
60- throw new ArgumentOutOfRangeException ( nameof ( value ) ) ;
61- }
62-
63- if ( false == string . IsNullOrWhiteSpace ( validatorRegex ) )
64- {
65- var re = new Regex ( validatorRegex ) ;
66- if ( false == re . IsMatch ( value ) )
67+ if ( value . Length > maxLen )
6768 {
6869 throw new ArgumentOutOfRangeException ( nameof ( value ) ) ;
6970 }
70- }
7171
72- if ( encoding == Encoding . ASCII )
73- {
74- if ( false == isAscii ( value ) )
72+ if ( false == string . IsNullOrWhiteSpace ( validatorRegex ) )
7573 {
76- throw new ArgumentOutOfRangeException ( nameof ( value ) ) ;
74+ var re = new Regex ( validatorRegex ) ;
75+ if ( false == re . IsMatch ( value ) )
76+ {
77+ throw new ArgumentOutOfRangeException ( nameof ( value ) ) ;
78+ }
79+ }
80+
81+ if ( encoding == Encoding . ASCII )
82+ {
83+ if ( false == isAscii ( value ) )
84+ {
85+ throw new ArgumentOutOfRangeException ( nameof ( value ) ) ;
86+ }
7787 }
7888 }
7989
@@ -204,7 +214,12 @@ private ExchangeName() : base()
204214 }
205215
206216 public ExchangeName ( string exchangeName )
207- : base ( exchangeName , 127 , Encoding . ASCII , "^[a-zA-Z0-9-_.:]*$" )
217+ : this ( exchangeName , false )
218+ {
219+ }
220+
221+ public ExchangeName ( string exchangeName , bool strictValidation )
222+ : base ( exchangeName , 127 , Encoding . ASCII , "^[a-zA-Z0-9-_.:]*$" , strictValidation )
208223 {
209224 }
210225
@@ -231,7 +246,12 @@ private QueueName() : base()
231246 }
232247
233248 public QueueName ( string queueName )
234- : base ( queueName , 127 , Encoding . ASCII , "^[a-zA-Z0-9-_.:]*$" )
249+ : this ( queueName , false )
250+ {
251+ }
252+
253+ public QueueName ( string queueName , bool strictValidation )
254+ : base ( queueName , 127 , Encoding . ASCII , "^[a-zA-Z0-9-_.:]*$" , strictValidation )
235255 {
236256 }
237257
@@ -263,7 +283,12 @@ private RoutingKey() : base()
263283 }
264284
265285 public RoutingKey ( string routingKey )
266- : base ( routingKey , 256 , Encoding . ASCII )
286+ : this ( routingKey , false )
287+ {
288+ }
289+
290+ public RoutingKey ( string routingKey , bool strictValidation )
291+ : base ( routingKey , 256 , Encoding . ASCII , strictValidation )
267292 {
268293 }
269294
@@ -289,7 +314,12 @@ private ConsumerTag() : base()
289314 }
290315
291316 public ConsumerTag ( string consumerTag )
292- : base ( consumerTag , 256 , Encoding . ASCII )
317+ : this ( consumerTag , false )
318+ {
319+ }
320+
321+ public ConsumerTag ( string consumerTag , bool strictValidation )
322+ : base ( consumerTag , 256 , Encoding . ASCII , strictValidation )
293323 {
294324 }
295325
0 commit comments