leveldb: DB.tableRangeCompaction: prevent compacting last level
diff --git a/leveldb/db_compaction.go b/leveldb/db_compaction.go
index 2600310..333ea9b 100644
--- a/leveldb/db_compaction.go
+++ b/leveldb/db_compaction.go
@@ -567,14 +567,18 @@
 	}
 }
 
-func (db *DB) tableRangeCompaction(level int, umin, umax []byte) {
-	db.logf("table@compaction range L%d %q:%q", level, umin, umax)
+func (db *DB) tableRangeCompaction(level int, umin, umax []byte) error {
+	if level >= db.s.o.GetNumLevel() {
+		return errors.New("leveldb: invalid compaction level")
+	}
 
+	db.logf("table@compaction range L%d %q:%q", level, umin, umax)
 	if level >= 0 {
 		if c := db.s.getCompactionRange(level, umin, umax); c != nil {
 			db.tableCompaction(c, true)
 		}
 	} else {
+		// Scan for maximum level with overlapped tables.
 		v := db.s.version()
 		m := 1
 		for i, t := range v.tables[1:] {
@@ -590,6 +594,8 @@
 			}
 		}
 	}
+
+	return nil
 }
 
 func (db *DB) tableAutoCompaction() {
@@ -779,8 +785,7 @@
 			case cIdle:
 				ackQ = append(ackQ, x)
 			case cRange:
-				db.tableRangeCompaction(cmd.level, cmd.min, cmd.max)
-				x.ack(nil)
+				x.ack(db.tableRangeCompaction(cmd.level, cmd.min, cmd.max))
 			default:
 				panic("leveldb: unknown command")
 			}