我已經重新編碼,以避免在C#中的字符串嵌入式空字符,...但不知道爲什麼下面的調用了字符串參數與嵌入的空字符沒有警告或異常,以及是否這是一個錯誤的StringBuilder.ToString()
,一一般來說對於C#來說不好的做法,或者最糟糕的是.NET中的一個漏洞。C#字符串嵌入空字符:錯誤,不好的做法,或漏洞?
對於背景我有一個通過XPath解析來創建節點並在需要時一個如下屬性內WPF應用程序。 StringBuilder類允許我用空字符替換路徑分隔符,例如:xpathtonode[i] = '\0';
儘管這是允許的,但如果這是一種不好的做法,我希望能夠接收併發出異常或至少發出警告。
對xmlpathtonode.ToString()
的調用將正確地將字符串返回到空終止字符,除非空字符作爲最後一個字符嵌入時,則空字符將包含在由ToString()
返回的字符串中。因此,該字符串的Length
屬性會比預期的字符串值長。
如果StringBuilder.ToString()
將在字符串末尾識別一個空字符,它排除在外,也不會有以下問題。也許這只是StringBuilder類中的一個bug ...
隨後調用XmlDocument.CreateAttribute(...)
,或者甚至是調用來排除嵌入的空字符xpathtonode.ToString().Substring(offset,length)
將退出執行的線程而沒有錯誤或異常。我的程序和調試器將繼續運行,就好像這個調用從未發生過一樣......
我懷疑這會是一種OS風格的緩衝區溢出漏洞,......但令人毛骨悚然的是讓執行流程中斷並繼續沒有任何指示。
錯誤?不好的做法?漏洞?
不好的做法... – 2014-11-04 00:46:59
@TMcKeown,闡述爲什麼。 – Adrian 2014-11-04 00:48:49
當你說'調用xmlpathtonode.ToString()會正確地返回字符串到空終止字符'你是什麼意思?它應該返回整個事物,包括空字符後面的任何文本。 – 2014-11-04 00:58:39