diff options
author | Araq <rumpf_a@web.de> | 2018-08-08 18:22:48 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2018-08-08 18:22:48 +0200 |
commit | babd31360a93b1c17d33240c82391761e8419a95 (patch) | |
tree | 926544965ffded3a893dcc0f2737f4544e29b95d | |
parent | b07d1f1dc38bdf073f0036095ff120f1d72d53de (diff) | |
download | Nim-babd31360a93b1c17d33240c82391761e8419a95.tar.gz |
fixes more nil string bugs
-rw-r--r-- | lib/packages/docutils/rstgen.nim | 7 | ||||
-rw-r--r-- | lib/pure/strutils.nim | 10 | ||||
-rw-r--r-- | lib/system/sysstr.nim | 1 |
3 files changed, 10 insertions, 8 deletions
diff --git a/lib/packages/docutils/rstgen.nim b/lib/packages/docutils/rstgen.nim index 43a429a17..db9a83755 100644 --- a/lib/packages/docutils/rstgen.nim +++ b/lib/packages/docutils/rstgen.nim @@ -312,7 +312,6 @@ proc setIndexTerm*(d: var RstGenerator, id, term: string, ## The index won't be written to disk unless you call `writeIndexFile() ## <#writeIndexFile>`_. The purpose of the index is documented in the `docgen ## tools guide <docgen.html#index-switch>`_. - assert(not d.theIndex.isNil) var entry = term isTitle = false @@ -337,7 +336,7 @@ proc hash(n: PRstNode): int = result = hash(n.text) elif n.len > 0: result = hash(n.sons[0]) - for i in 1 .. <len(n): + for i in 1 ..< len(n): result = result !& hash(n.sons[i]) result = !$result @@ -452,7 +451,7 @@ proc generateSymbolIndex(symbols: seq[IndexEntry]): string = title="$3" data-doc-search-tag="$2" href="$1">$2</a></li> """, [url, text, desc]) else: - result.addf("""<li><a class="reference external" + result.addf("""<li><a class="reference external" data-doc-search-tag="$2" href="$1">$2</a></li> """, [url, text]) inc j @@ -524,7 +523,7 @@ proc generateDocumentationTOC(entries: seq[IndexEntry]): string = titleTag = levels[L].text else: result.add(level.indentToLevel(levels[L].level)) - result.addf("""<li><a class="reference" data-doc-search-tag="$1" href="$2"> + result.addf("""<li><a class="reference" data-doc-search-tag="$1" href="$2"> $3</a></li> """, [titleTag & " : " & levels[L].text, link, levels[L].text]) inc L diff --git a/lib/pure/strutils.nim b/lib/pure/strutils.nim index 4aede541a..989a832cf 100644 --- a/lib/pure/strutils.nim +++ b/lib/pure/strutils.nim @@ -1366,9 +1366,11 @@ proc find*(s: string, sub: char, start: Natural = 0, last: Natural = 0): int {.n if sub == s[i]: return i else: when hasCStringBuiltin: - let found = c_memchr(s[start].unsafeAddr, sub, last-start+1) - if not found.isNil: - return cast[ByteAddress](found) -% cast[ByteAddress](s.cstring) + let L = last-start+1 + if L > 0: + let found = c_memchr(s[start].unsafeAddr, sub, L) + if not found.isNil: + return cast[ByteAddress](found) -% cast[ByteAddress](s.cstring) else: for i in start..last: if sub == s[i]: return i @@ -1515,7 +1517,7 @@ proc replace*(s, sub: string, by = ""): string {.noSideEffect, elif subLen == 1: # when the pattern is a single char, we use a faster # char-based search that doesn't need a skip table: - var c = sub[0] + let c = sub[0] let last = s.high var i = 0 while true: diff --git a/lib/system/sysstr.nim b/lib/system/sysstr.nim index 77f2ca040..0e690d832 100644 --- a/lib/system/sysstr.nim +++ b/lib/system/sysstr.nim @@ -110,6 +110,7 @@ proc nimToCStringConv(s: NimString): cstring {.compilerProc, inline.} = else: result = cstring(addr s.data) proc copyStr(s: NimString, start: int): NimString {.compilerProc.} = + if s == nil: return nil result = copyStrLast(s, start, s.len-1) proc toNimStr(str: cstring, len: int): NimString {.compilerProc.} = |