Ayende @ Rahien

Ayende @ Rahien

Oren Eini aka Ayende Rahien CEO of Hibernating Rhinos LTD, which develops RavenDB, a NoSQL Open Source Document Database.

Get in touch with me:

oren@ravendb.net

+972 52-548-6969

Posts: 7,400 | Comments: 50,823

Copyright ©️ Ayende Rahien 2004 — 2023

Privacy Policy Terms
filter by tags archive
stack view grid view
  • architecture (543) rss
  • bugs (434) rss
  • challanges (116) rss
  • community (352) rss
  • databases (433) rss
  • design (845) rss
  • development (565) rss
  • hibernating-practices (60) rss
  • miscellaneous (590) rss
  • performance (359) rss
  • programming (1040) rss
  • raven (1346) rss
  • ravendb.net (416) rss
  • reviews (182) rss
  • uberprof (41) rss
  • 2023
    • February (1)
    • January (8)
  • 2022
    • December (5)
    • November (7)
    • October (7)
    • September (9)
    • August (10)
    • July (15)
    • June (12)
    • May (9)
    • April (14)
    • March (15)
    • February (13)
    • January (16)
  • 2021
    • December (23)
    • November (20)
    • October (16)
    • September (6)
    • August (16)
    • July (11)
    • June (16)
    • May (4)
    • April (10)
    • March (11)
    • February (15)
    • January (14)
  • 2020
    • December (10)
    • November (13)
    • October (15)
    • September (6)
    • August (9)
    • July (9)
    • June (17)
    • May (15)
    • April (14)
    • March (21)
    • February (16)
    • January (13)
  • 2019
    • December (17)
    • November (14)
    • October (16)
    • September (10)
    • August (8)
    • July (16)
    • June (11)
    • May (13)
    • April (18)
    • March (12)
    • February (19)
    • January (23)
  • 2018
    • December (15)
    • November (14)
    • October (19)
    • September (18)
    • August (23)
    • July (20)
    • June (20)
    • May (23)
    • April (15)
    • March (23)
    • February (19)
    • January (23)
  • 2017
    • December (21)
    • November (24)
    • October (22)
    • September (21)
    • August (23)
    • July (21)
    • June (24)
    • May (21)
    • April (21)
    • March (23)
    • February (20)
    • January (23)
  • 2016
    • December (17)
    • November (18)
    • October (22)
    • September (18)
    • August (23)
    • July (22)
    • June (17)
    • May (24)
    • April (16)
    • March (16)
    • February (21)
    • January (21)
  • 2015
    • December (5)
    • November (10)
    • October (9)
    • September (17)
    • August (20)
    • July (17)
    • June (4)
    • May (12)
    • April (9)
    • March (8)
    • February (25)
    • January (17)
  • 2014
    • December (22)
    • November (19)
    • October (21)
    • September (37)
    • August (24)
    • July (23)
    • June (13)
    • May (19)
    • April (24)
    • March (23)
    • February (21)
    • January (24)
  • 2013
    • December (23)
    • November (29)
    • October (27)
    • September (26)
    • August (24)
    • July (24)
    • June (23)
    • May (25)
    • April (26)
    • March (24)
    • February (24)
    • January (21)
  • 2012
    • December (19)
    • November (22)
    • October (27)
    • September (24)
    • August (30)
    • July (23)
    • June (25)
    • May (23)
    • April (25)
    • March (25)
    • February (28)
    • January (24)
  • 2011
    • December (17)
    • November (14)
    • October (24)
    • September (28)
    • August (27)
    • July (30)
    • June (19)
    • May (16)
    • April (30)
    • March (23)
    • February (11)
    • January (26)
  • 2010
    • December (29)
    • November (28)
    • October (35)
    • September (33)
    • August (44)
    • July (17)
    • June (20)
    • May (53)
    • April (29)
    • March (35)
    • February (33)
    • January (36)
  • 2009
    • December (37)
    • November (35)
    • October (53)
    • September (60)
    • August (66)
    • July (29)
    • June (24)
    • May (52)
    • April (63)
    • March (35)
    • February (53)
    • January (50)
  • 2008
    • December (58)
    • November (65)
    • October (46)
    • September (48)
    • August (96)
    • July (87)
    • June (45)
    • May (51)
    • April (52)
    • March (70)
    • February (43)
    • January (49)
  • 2007
    • December (100)
    • November (52)
    • October (109)
    • September (68)
    • August (80)
    • July (56)
    • June (150)
    • May (115)
    • April (73)
    • March (124)
    • February (102)
    • January (68)
  • 2006
    • December (95)
    • November (53)
    • October (120)
    • September (57)
    • August (88)
    • July (54)
    • June (103)
    • May (89)
    • April (84)
    • March (143)
    • February (78)
    • January (64)
  • 2005
    • December (70)
    • November (97)
    • October (91)
    • September (61)
    • August (74)
    • July (92)
    • June (100)
    • May (53)
    • April (42)
    • March (41)
    • February (84)
    • January (31)
  • 2004
    • December (49)
    • November (26)
    • October (26)
    • September (6)
    • April (10)
Deep dive into RavenDB webinars
  previous post next post  
Jul 02 2013

Spot the bug…

time to read 1 min | 39 words

image

Do you see it? It took me ages to find it.

Tweet Share Share 11 comments
Tags:
  • bugs

  previous post next post  

Comments

Igal Tabachnik
02 Jul 2013
09:09 AM
Igal Tabachnik

Yay scoping braces!

Fredrik
02 Jul 2013
09:10 AM
Fredrik

Ha ha, it's quite subtle, but so obvious once you spot it.

Sebastian
02 Jul 2013
09:11 AM
Sebastian

I think there is something 'else' missing ;-)

Ramon Smits
02 Jul 2013
09:15 AM
Ramon Smits

Missing else?

Sam
02 Jul 2013
09:26 AM
Sam

LOL, I didn't saw it either

Marc Brooks
02 Jul 2013
09:46 AM
Marc Brooks

Not to mention the sheer lunacy of mid not being related to target in any discernable way. Ugh.

(oh, yeah, and missing else)

P.Czatrowski
02 Jul 2013
10:00 AM
P.Czatrowski

Apart from missing else, what about arithmetic overflow?

I would change the line: var mid = (left + right + 1) / 2;

to this: var mid = left + (right - left + 1) / 2;

You still get the same result, but it's a little bit safer for higher values.

tobi
02 Jul 2013
10:08 AM
tobi

The bug aside, I'd use checked((left + right + 1) / 2).

Roman Boiko
03 Jul 2013
08:25 AM
Roman Boiko

Another potential problem: behavior of comparator might be not aligned with subtraction, so that

_comparator.Compare(mid-1, mid) >=0

Alex
05 Jul 2013
07:48 AM
Alex

This is really a tricky problem to spot. :) Everyone is focused on the code inside the brackets and the missing "else" is not being observed very fast.

Adam Fridental
12 Jul 2013
09:18 AM
Adam Fridental

Sorry to dissapoint, took me a second.

Anyway, I don't belive in scoping braces when they contain 1 line, it's not safer and not easier to read.. just redundant.

Comment preview

Comments have been closed on this topic.

Markdown formatting

ESC to close

Markdown turns plain text formatting into fancy HTML formatting.

Phrase Emphasis

*italic*   **bold**
_italic_   __bold__

Links

Inline:

An [example](http://url.com/ "Title")

Reference-style labels (titles are optional):

An [example][id]. Then, anywhere
else in the doc, define the link:
  [id]: http://example.com/  "Title"

Images

Inline (titles are optional):

![alt text](/path/img.jpg "Title")

Reference-style:

![alt text][id]
[id]: /url/to/img.jpg "Title"

Headers

Setext-style:

Header 1
========
Header 2
--------

atx-style (closing #'s are optional):

# Header 1 #
## Header 2 ##
###### Header 6

Lists

Ordered, without paragraphs:

1.  Foo
2.  Bar

Unordered, with paragraphs:

*   A list item.
    With multiple paragraphs.
*   Bar

You can nest them:

*   Abacus
    * answer
*   Bubbles
    1.  bunk
    2.  bupkis
        * BELITTLER
    3. burper
*   Cunning

Blockquotes

> Email-style angle brackets
> are used for blockquotes.
> > And, they can be nested.
> #### Headers in blockquotes
> 
> * You can quote a list.
> * Etc.

Horizontal Rules

Three or more dashes or asterisks:

---
* * *
- - - - 

Manual Line Breaks

End a line with two or more spaces:

Roses are red,   
Violets are blue.

Fenced Code Blocks

Code blocks delimited by 3 or more backticks or tildas:

```
This is a preformatted
code block
```

Header IDs

Set the id of headings with {#<id>} at end of heading line:

## My Heading {#myheading}

Tables

Fruit    |Color
---------|----------
Apples   |Red
Pears	 |Green
Bananas  |Yellow

Definition Lists

Term 1
: Definition 1
Term 2
: Definition 2

Footnotes

Body text with a footnote [^1]
[^1]: Footnote text here

Abbreviations

MDD <- will have title
*[MDD]: MarkdownDeep

 

FUTURE POSTS

  1. On AI, GPT and the future of developers - one day from now

There are posts all the way to Feb 02, 2023

RECENT SERIES

  1. Production postmortem (48):
    27 Jan 2023 - The server ate all my memory
  2. Answer (12):
    05 Jan 2023 - what does this code print?
  3. Challenge (71):
    04 Jan 2023 - what does this code print?
  4. Recording (7):
    12 Dec 2022 - Software architecture with Oren Eini
  5. RavenDB Indexing (2):
    20 Oct 2022 - exact()
View all series

RECENT COMMENTS

  • Gavan, Yes, technically speaking, if you were using an auto index, we could do that, sure. The scenario in this case is t...
    By Oren Eini on Production postmortem: The server ate all my memory
  • This kind of problem does occur sometimes - at least this situation allows for parsing by a token to get the final value. ...
    By Gavan on Production postmortem: The server ate all my memory
  • Mark, I doubt that they are related, given the time frames involved. I also hope that this post would show up now on searche...
    By Oren Eini on Production postmortem: The heisenbug server
  • Um, just noticing your reference to that XKCD, but also noticing you didn't answer the Stack Overflow question, and nor the G...
    By Mark on Production postmortem: The heisenbug server
  • Stuart, Yes, I wrote about it here, including some examples: https://ayende.com/blog/196481-A/badly-implementing-encrypti...
    By Oren Eini on Using client side encrypted fields in RavenDB

Syndication

Main feed Feed Stats
Comments feed   Comments Feed Stats