Even though this isn't a PostGIS question hopefully this will help.
It's my understanding that all solutions to a bounding box geohash must start with the bounding box hash. So here is a demonstration from PostGIS world.
SELECT ST_GeoHash(ST_MakeEnvelope(12.45, 41.8, 12.49, 41.99,4326 ));
Gives a geohash of: sr2
Now normally in PostGIS, I'd just use an overlap query like so:
WHERE ST_MakeEnvelope(12.45, 41.8, 12.49, 41.99,4326 )::geography && geog;
Which gives me an answer of two records with geohashes
Note how they all start with sr2.
Note that an equivalent albeit slower approach(unless I have a functional index on ST_GeoHash) would be:
WHERE ST_GeoHash(geog) LIKE ST_GeoHash(ST_MakeEnvelope(12.45, 41.8, 12.49, 41.99,4326 )) || '%';
Would give me the same answer. So in short I could be wrong, but I think the solution to any GeoHash bounding box filter is any geohash that starts with the geohash of the bounding box.
At a certain point if you make your bounding box big enough, it has no geohash which in short means your bounding box is too big to be satisfied by a geohash query.