You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2014/04/18 18:26:30 UTC
svn commit: r1588507 - in
/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene:
codecs/lucene42/Lucene42DocValuesProducer.java
codecs/lucene45/Lucene45DocValuesProducer.java index/FieldInfos.java
Author: rmuir
Date: Fri Apr 18 16:26:30 2014
New Revision: 1588507
URL: http://svn.apache.org/r1588507
Log:
LUCENE-5616: remove FieldInfos leniency
Modified:
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene42/Lucene42DocValuesProducer.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene45/Lucene45DocValuesProducer.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/FieldInfos.java
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene42/Lucene42DocValuesProducer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene42/Lucene42DocValuesProducer.java?rev=1588507&r1=1588506&r2=1588507&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene42/Lucene42DocValuesProducer.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene42/Lucene42DocValuesProducer.java Fri Apr 18 16:26:30 2014
@@ -148,6 +148,13 @@ class Lucene42DocValuesProducer extends
private void readFields(IndexInput meta, FieldInfos infos) throws IOException {
int fieldNumber = meta.readVInt();
while (fieldNumber != -1) {
+ // check should be: infos.fieldInfo(fieldNumber) != null, which incorporates negative check
+ // but docvalues updates are currently buggy here (loading extra stuff, etc): LUCENE-5616
+ if (fieldNumber < 0) {
+ // trickier to validate more: because we re-use for norms, because we use multiple entries
+ // for "composite" types like sortedset, etc.
+ throw new CorruptIndexException("Invalid field number: " + fieldNumber + ", input=" + meta);
+ }
int fieldType = meta.readByte();
if (fieldType == NUMBER) {
NumericEntry entry = new NumericEntry();
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene45/Lucene45DocValuesProducer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene45/Lucene45DocValuesProducer.java?rev=1588507&r1=1588506&r2=1588507&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene45/Lucene45DocValuesProducer.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene45/Lucene45DocValuesProducer.java Fri Apr 18 16:26:30 2014
@@ -185,6 +185,13 @@ public class Lucene45DocValuesProducer e
private void readFields(IndexInput meta, FieldInfos infos) throws IOException {
int fieldNumber = meta.readVInt();
while (fieldNumber != -1) {
+ // check should be: infos.fieldInfo(fieldNumber) != null, which incorporates negative check
+ // but docvalues updates are currently buggy here (loading extra stuff, etc): LUCENE-5616
+ if (fieldNumber < 0) {
+ // trickier to validate more: because we re-use for norms, because we use multiple entries
+ // for "composite" types like sortedset, etc.
+ throw new CorruptIndexException("Invalid field number: " + fieldNumber + " (resource=" + meta + ")");
+ }
byte type = meta.readByte();
if (type == Lucene45DocValuesFormat.NUMERIC) {
numerics.put(fieldNumber, readNumericEntry(meta));
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/FieldInfos.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/FieldInfos.java?rev=1588507&r1=1588506&r2=1588507&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/FieldInfos.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/FieldInfos.java Fri Apr 18 16:26:30 2014
@@ -58,6 +58,9 @@ public class FieldInfos implements Itera
boolean hasDocValues = false;
for (FieldInfo info : infos) {
+ if (info.number < 0) {
+ throw new IllegalArgumentException("illegal field number: " + info.number + " for field " + info.name);
+ }
FieldInfo previous = byNumber.put(info.number, info);
if (previous != null) {
throw new IllegalArgumentException("duplicate field numbers: " + previous.name + " and " + info.name + " have: " + info.number);
@@ -148,15 +151,16 @@ public class FieldInfos implements Itera
/**
* Return the fieldinfo object referenced by the fieldNumber.
- * @param fieldNumber field's number. if this is negative, this method
- * always returns null.
+ * @param fieldNumber field's number.
* @return the FieldInfo object or null when the given fieldNumber
* doesn't exist.
- */
- // TODO: fix this negative behavior, this was something related to Lucene3x?
- // if the field name is empty, i think it writes the fieldNumber as -1
+ * @throws IllegalArgumentException if fieldNumber is negative
+ */
public FieldInfo fieldInfo(int fieldNumber) {
- return (fieldNumber >= 0) ? byNumber.get(fieldNumber) : null;
+ if (fieldNumber < 0) {
+ throw new IllegalArgumentException("Illegal field number: " + fieldNumber);
+ }
+ return byNumber.get(fieldNumber);
}
static final class FieldNumbers {