From 76b7b643071657af67a376053863b6fb0e07bcd4 Mon Sep 17 00:00:00 2001 From: Marc-Andre Laperle Date: Wed, 10 Jul 2019 00:30:54 -0400 Subject: [PATCH] Bug 549028 - Fix missing getRecordSize() leading to index corruption Because of the missing getRecordSize implementations, subclasses would starting writing in records that were thought to be malloc'ed by the parent but it was instead writing in other blocks, possible used by other PDOM objects or free blocks to be used later and now not initialized to 0. This could lead to a few different exceptions like - BufferUnderflowException(Chunk.getChars) - CoreException: Corrupted database - ArrayIndexOutOfBoundsException(AbstractIndexerTask$IndexFileContent.merge) and possibly others. Change-Id: Ie6d1986a22a9fb5f5e90cb741046d098ebf10a90 Signed-off-by: Marc-Andre Laperle --- .../cdt/internal/core/pdom/dom/cpp/PDOMCPPFieldTemplate.java | 5 +++++ .../dom/cpp/PDOMCPPFieldTemplatePartialSpecialization.java | 3 ++- .../cpp/PDOMCPPVariableTemplatePartialSpecialization.java | 5 +++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPFieldTemplate.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPFieldTemplate.java index 414f08f2504..6245ae115cb 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPFieldTemplate.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPFieldTemplate.java @@ -47,6 +47,11 @@ public class PDOMCPPFieldTemplate extends PDOMCPPVariableTemplate implements ICP return IIndexCPPBindingConstants.CPP_FIELD_TEMPLATE; } + @Override + protected int getRecordSize() { + return RECORD_SIZE; + } + @Override public ICompositeType getCompositeTypeOwner() { return getClassOwner(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPFieldTemplatePartialSpecialization.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPFieldTemplatePartialSpecialization.java index 026dfe7bb1e..56ad7571b16 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPFieldTemplatePartialSpecialization.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPFieldTemplatePartialSpecialization.java @@ -20,6 +20,7 @@ import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.ICompositeType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPField; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPFieldTemplate; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition; import org.eclipse.cdt.core.dom.ast.cpp.ICPPVariableTemplatePartialSpecialization; import org.eclipse.cdt.internal.core.index.IIndexCPPBindingConstants; @@ -28,7 +29,7 @@ import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode; import org.eclipse.core.runtime.CoreException; public class PDOMCPPFieldTemplatePartialSpecialization extends PDOMCPPVariableTemplatePartialSpecialization - implements ICPPField { + implements ICPPFieldTemplate { public PDOMCPPFieldTemplatePartialSpecialization(PDOMCPPLinkage linkage, PDOMNode parent, ICPPVariableTemplatePartialSpecialization parSpec, PDOMCPPFieldTemplate pdomPrimary) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPVariableTemplatePartialSpecialization.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPVariableTemplatePartialSpecialization.java index 81334558db5..5a32ce8aeae 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPVariableTemplatePartialSpecialization.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPVariableTemplatePartialSpecialization.java @@ -63,6 +63,11 @@ public class PDOMCPPVariableTemplatePartialSpecialization extends PDOMCPPVariabl return IIndexCPPBindingConstants.CPP_VARIABLE_TEMPLATE_PARTIAL_SPECIALIZATION; } + @Override + protected int getRecordSize() { + return RECORD_SIZE; + } + @Override public ICPPTemplateDefinition getPrimaryTemplate() { try {